- Timestamp:
- Feb 4, 2012, 6:21:22 PM (13 years ago)
- google:author:
- gregli@hotmail.com
- Location:
- trunk
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Serial_Server/library/Image.cpp
r219 r233 137 137 #define ATA_dwLBACnt 60 138 138 139 #define ATA_ VendorSpecific_ReturnPortBaud 158139 #define ATA_wVendor 159 140 140 141 141 #define ATA_wCaps_LBA 0x200 … … 164 164 }; 165 165 166 void Image::respondInquire( unsigned short *buff, struct baudRate *baudRate, unsigned char portAndBaud ) 167 { 168 unsigned short comPort = 0; 169 struct comPorts *cp; 170 171 if( portAndBaud ) 172 { 173 for( cp = supportedComPorts; cp->port && cp->port != ((portAndBaud << 3) + 0x260); cp++ ) ; 174 if( cp->port ) 175 comPort = cp->com; 176 } 177 166 void Image::respondInquire( unsigned short *buff, struct baudRate *baudRate, unsigned short port, unsigned char scan ) 167 { 178 168 memset( &buff[0], 0, 514 ); 179 169 180 if( comPort ) 181 sprintf( (char *) &buff[ATA_strModel], "%.20s (COM%d/%s)", shortFileName, comPort, baudRate->display ); 182 else 183 sprintf( (char *) &buff[ATA_strModel], "%.30s (%s baud)", shortFileName, baudRate->display ); 184 185 // strncpy( (char *) &buff[ATA_strModel], img->shortFileName, 40 ); 170 if( scan ) 171 { 172 unsigned short comPort = 0; 173 struct comPorts *cp; 174 175 if( port ) 176 { 177 for( cp = supportedComPorts; cp->port && cp->port != port; cp++ ) ; 178 if( cp->port ) 179 comPort = cp->com; 180 } 181 182 if( comPort ) 183 sprintf( (char *) &buff[ATA_strModel], "%.15s (COM%c/%s)", shortFileName, comPort, baudRate->display ); 184 else 185 sprintf( (char *) &buff[ATA_strModel], "%.25s (%s baud)", shortFileName, baudRate->display ); 186 } 187 else 188 sprintf( (char *) &buff[ATA_strModel], "%.30s", shortFileName ); 186 189 187 190 strncpy( (char *) &buff[ATA_strSerial], "serial", 20 ); -
trunk/Serial_Server/library/Library.h
r223 r233 42 42 static int parseGeometry( char *str, unsigned long *p_cyl, unsigned long *p_head, unsigned long *p_sect ); 43 43 44 void respondInquire( unsigned short *buff, struct baudRate *baudRate, unsigned char portAndBaud);44 void respondInquire( unsigned short *buff, struct baudRate *baudRate, unsigned short port, unsigned char scan ); 45 45 46 46 void init( char *name, int p_readOnly, int p_drive, unsigned long p_cyl, unsigned long p_head, unsigned long p_sect, int p_useCHS ); -
trunk/Serial_Server/library/Process.cpp
r219 r233 31 31 unsigned char driveAndHead; 32 32 unsigned char count; 33 unsigned char undefined1;34 unsigned char port AndBaud;35 unsigned char undefined2;33 unsigned char scan; 34 unsigned char port; 35 unsigned char baud; 36 36 } inquire; 37 37 unsigned char b[514]; … … 48 48 #define SERIAL_COMMAND_MASK 0xe3 49 49 #define SERIAL_COMMAND_HEADERMASK 0xe0 50 51 #define SERIAL_INQUIRE_PORTANDBAUD_BAUDMASK 352 #define SERIAL_INQUIRE_PORTANDBAUD_PORTMASK 0xfc53 #define SERIAL_INQUIRE_PORTANDBAUD_STARTINGPORT 0x24054 55 #define SERIAL_INQUIRE_PORTANDBAUD_PORTTRANSLATE( a ) ( ((a) & SERIAL_INQUIRE_PORTANDBAUD_PORT) << 1 | SERIAL_INQUIRE_PORTANDBAUD_STARTINGPORT )56 50 57 51 #define ATA_COMMAND_LBA 0x40 … … 96 90 unsigned long cyl, sect, head; 97 91 unsigned long perfTimer; 92 unsigned char lastScan; 98 93 99 94 GetTime_Timeout_Local = GetTime_Timeout(); … … 102 97 readto = 0; 103 98 workCount = workOffset = workCommand = 0; 99 lastScan = 0; 104 100 105 101 lasttick = GetTime(); … … 282 278 if( workCommand == SERIAL_COMMAND_INQUIRE ) 283 279 log( 1, "Inquire %d: Client Port=0x%x, Client Baud=%s", img == image0 ? 0 : 1, 284 ((buff.inquire.portAndBaud & SERIAL_INQUIRE_PORTANDBAUD_PORTMASK) << 1) 285 + SERIAL_INQUIRE_PORTANDBAUD_STARTINGPORT, 286 baudRateMatchDivisor( buff.inquire.portAndBaud & SERIAL_INQUIRE_PORTANDBAUD_BAUDMASK )->display ); 280 ((unsigned short) buff.inquire.port) << 2, 281 baudRateMatchDivisor( buff.inquire.baud )->display ); 287 282 else if( buff.chs.driveAndHead & ATA_COMMAND_LBA ) 288 283 log( 1, "%s %d: LBA=%u, Count=%u", comStr, img == image0 ? 0 : 1, … … 325 320 if( workCommand == SERIAL_COMMAND_INQUIRE ) 326 321 { 322 unsigned char localScan; 323 327 324 if( serial->speedEmulation && 328 (buff.inquire.portAndBaud & SERIAL_INQUIRE_PORTANDBAUD_BAUDMASK)!= serial->baudRate->divisor )325 buff.inquire.baud != serial->baudRate->divisor ) 329 326 { 330 327 log( 1, " Ignoring Inquire with wrong baud rate" ); … … 333 330 } 334 331 335 img->respondInquire( &buff.w[0], serial->baudRate, buff.inquire.portAndBaud ); 332 localScan = buff.inquire.scan; // need to do this before the call to 333 // img->respondInquire, as it will clear the buff 334 img->respondInquire( &buff.w[0], serial->baudRate, 335 ((unsigned short) buff.inquire.port) << 2, 336 (img == image1 && lastScan) || buff.inquire.scan ); 337 lastScan = localScan; 336 338 } 337 339 // … … 342 344 img->seekSector( mylba + workOffset ); 343 345 img->readSector( &buff.w[0] ); 346 lastScan = 0; 344 347 } 345 348 -
trunk/Serial_Server/library/Serial.cpp
r215 r233 12 12 struct baudRate supportedBaudRates[] = 13 13 { 14 { 2400, 0x0, "2400" }, 15 { 4800, 0xff, "4800" }, 16 { 9600, 0x1, "9600" }, 17 { 19200, 0xff, "19.2K" }, 18 { 38400, 0x2, "38.4K" }, 19 { 76800, 0xff, "76.8K" }, 20 { 115200, 0x3, "115.2K" }, 21 { 153600, 0xff, "153.6K" }, 22 { 230400, 0xff, "230.4K" }, 23 { 460800, 0xff, "460.8K" }, 24 { 0, 0, NULL } 14 { 2400, 0x30, "2400" }, 15 { 4800, 0x18, "4800" }, 16 { 9600, 0xc, "9600" }, 17 { 19200, 0xff, "19.2K" }, 18 { 28800, 0x4, "28.8K" }, 19 { 38400, 0xff, "38.4K" }, 20 { 57600, 0x2, "57.6K" }, 21 { 76800, 0xff, "76.8K" }, 22 { 115200, 0x1, "115.2K" }, 23 { 153600, 0xff, "153.6K" }, 24 { 230400, 0xff, "230.4K" }, 25 { 460800, 0xff, "460.8K" }, 26 { 0, 0, "Unknown" }, 25 27 }; 26 28 … … 37 39 } 38 40 39 return( NULL);41 return( b ); 40 42 } 41 43 … … 47 49 ; 48 50 49 return( b ->rate ? b : NULL);51 return( b ); 50 52 } 51 53 -
trunk/Serial_Server/win32/Win32.cpp
r225 r233 32 32 " (default is a 32 MB disk, with CHS geometry 65:63:16)", 33 33 "", 34 " -p Named Pipe mode for emulators (pipe is '" PIPENAME "')",34 " -p Named Pipe mode for emulators (pipe is \"" PIPENAME "\")", 35 35 "", 36 36 " -c COMPortNumber COM Port to use (default is first found)", 37 37 "", 38 " -b BaudRate Baud rate to use on the COM port ", 39 " Without a rate multiplier: 2400, 9600, 38400, 115200", 40 " With a 2x rate multiplier: 4800, 19200, 76800, 230400", 41 " With a 4x rate multiplier: 9600, 38400, 153600, 460800", 42 " Abbreviations also accepted (ie, '460K', '38.4K', etc)", 43 " (default is 38400, 115200 in named pipe mode)", 38 " -b BaudRate Baud rate to use on the COM port, with client machine", 39 " rate multiplier in effect:", 40 " None: 2400, 4800, 9600, 28.8K, 57.6K, 115.2K", 41 " 2x: 4800, 9600, 19200, 57.6K, 115.2K, 230.4K", 42 " 4x: 9600, 19200, 38400, 115.2K, 230.4K, 460.8K", 43 " and for completeness: 76.8K, 153.6K", 44 " (default is 9600, 115.2K when in named pipe mode)", 44 45 "", 45 46 " -t Disable timeout, useful for long delays when debugging", … … 148 149 break; 149 150 case 'b': case 'B': 150 if( !(baudRate = baudRateMatchString( argv[++t] )) ) 151 { 152 fprintf( stderr, "Unknown Baud Rate %s\n\n", argv[t] ); 153 usage(); 154 } 151 if( !(baudRate = baudRateMatchString( argv[++t] )) || !baudRate->rate ) 152 log( -2, "Unknown Baud Rate \"%s\"", argv[t] ); 155 153 break; 156 154 default: 157 fprintf( stderr, "Unknown Option: %s\n\n", argv[t] ); 158 usage(); 155 log( -2, "Unknown Option: \"%s\"", argv[t] ); 159 156 } 160 157 } … … 179 176 180 177 if( !baudRate ) 181 baudRate = baudRateMatchString( " 38400" );178 baudRate = baudRateMatchString( "9600" ); 182 179 183 180 do … … 206 203 vfprintf( stderr, message, args ); 207 204 fprintf( stderr, "\n" ); 205 if( level < -1 ) 206 { 207 fprintf( stderr, "\n" ); 208 usage(); 209 } 208 210 exit( 1 ); 209 211 } -
trunk/Serial_Server/win32/Win32Serial.h
r225 r233 37 37 if( !strcmp( name, "PIPE" ) ) 38 38 { 39 log( 0, "Opening named pipe %s (simulating % lu baud)", PIPENAME, baudRate->rate);39 log( 0, "Opening named pipe %s (simulating %s baud)", PIPENAME, baudRate->display ); 40 40 41 41 pipe = CreateNamedPipeA( PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE|PIPE_REJECT_REMOTE_CLIENTS, 2, 1024, 1024, 0, NULL ); -
trunk/XTIDE_Universal_BIOS/Inc/ATA_ID.inc
r3 r233 254 254 .wRMSN resw 1 ; 127F, Removable Media Status Notification feature set support 255 255 .wSecurity resw 1 ; 128FV, Security Status 256 resw 160-129 ; 129...159X 256 resw 159-129 ; 129...158X, Vendor Specific 257 .wVendor resw 1 ; 159X, Vendor Specific - picking one word for use by the Serial Port code 257 258 .wCFAPower resw 1 ; 160FV, CFA Power Mode 1 258 259 resw 176-161 ; 161...175R, Reserved for assignment by the CompactFlash Association -
trunk/XTIDE_Universal_BIOS/Inc/CustomDPT.inc
r232 r233 28 28 .dpt resb DPT_size 29 29 30 ; Block size is specified in sectors (1, 2, 4, 8, 16, 32, 64 or 128) 30 ; Block size is specified in sectors (1, 2, 4, 8, 16, 32 or 64). 31 ; 128 is not allowed to prevent offset overflow during data transfer. 31 32 .wSetAndMaxBlock: 32 33 .bSetBlock resb 1 ; Current block size (at least 1) … … 39 40 .dpt resb DPT_size 40 41 41 .bSerialPortAndBaud resb 1 ; Packed I/O port and baud rate for serial drives 42 resb 1 ; unused alignment 42 .wSerialPortAndBaud: 43 .bSerialPort resb 1 ; Serial connection I/O port address, divided by 4 44 .bSerialBaud resb 1 ; Serial connection baud rate divisor 43 45 endstruc 44 46 %endif -
trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc
r218 r233 13 13 .bHDSwap resb 1 ; Hard Drive to swap to 80h and vice versa 14 14 .bXlatedDrv resb 1 ; Drive number after translation 15 %ifdef MODULE_SERIAL16 .bLastSerial resb 1 ; Packed Port and Baud for last serial drive detected17 ; (using space of an alignment byte,18 ; used during and after boot (int13/25h case))19 %else20 15 resb 1 ; alignment 21 %endif22 16 endstruc 23 17 -
trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc
r227 r233 48 48 ; Controller specific variables 49 49 struc IDEVARS 50 ;;; Word 0 51 .wSerialPortAndBaud: ; Serial connection port (low, divided by 4) and baud rate divisor (high) 50 52 .wPort: ; IDE Base Port for Command Block (usual) Registers 51 .bSerial COMDigit resb 1 ; Serial Device COM Port digit52 .bSerial PackedPortAndBaud resb 1 ; Serial Device packed port and baud53 .bSerialPort resb 1 54 .bSerialBaud resb 1 53 55 54 .wPortCtrl: ; IDE Base Port for Control Block Registers 55 .wSerialPackedPrintBaud resb 2 ; Serial Device packed baud rate for printing 56 ;;; Word 1 57 .wPortCtrl: 58 .bSerialUnused resb 1 ; IDE Base Port for Control Block Registers 56 59 60 .wSerialCOMPortCharAndDevice: ; In DetectPrint, we grab the COM Port char and Device at the same time 61 .bSerialCOMPortChar resb 1 ; Serial connection COM port number/letter 62 63 ;;; Word 2 57 64 .bDevice resb 1 ; Device type 65 58 66 .bIRQ resb 1 ; Interrupt Request Number 67 68 ;;; And more... 59 69 .drvParamsMaster resb DRVPARAMS_size 60 70 .drvParamsSlave resb DRVPARAMS_size 61 71 endstruc 72 73 %if IDEVARS.bSerialCOMPortChar+1 != IDEVARS.bDevice 74 %erorr "IDEVARS.bSerialCOMPortChar needs to come immediately before IDEVARS.bDevice so that both bytes can be fetched at the same time inside DetectPrint.asm" 75 %endif 62 76 63 77 ; Default values for Port and PortCtrl, shared with the configurator … … 67 81 DEVICE_ATA_DEFAULT_PORT EQU 1F0h 68 82 DEVICE_ATA_DEFAULT_PORTCTRL EQU 3F0h 69 DEVICE_SERIAL_DEFAULT_COM EQU 0 ; COM170 DEVICE_SERIAL_DEFAULT_BAUD EQU 1 ; 960071 83 72 84 ; Device types for IDEVARS.bDevice … … 77 89 DEVICE_16BIT_ATA EQU (3<<1) 78 90 DEVICE_32BIT_ATA EQU (4<<1) 79 DEVICE_SERIAL_PORT EQU (5<<1) 91 DEVICE_SERIAL_PORT EQU (5<<1) ; must be last entry, or remove optimization in DetectPrint 80 92 81 93 … … 94 106 FLG_DRVPARAMS_BLOCKMODE EQU (1<<1) ; Enable Block mode transfers 95 107 FLG_DRVPARAMS_USERLBA EQU (1<<2) ; User specified LBA values 96 97 98 ; Defines for IDEVARS.bSerialPackedPortAndBaud (same format used by DPT.bSerialPortAndBaud)99 ;100 ; pppp ppbb101 ; i/o port address = p * 2 + 240h102 ; baud rate = b, where 00 = 2400, 01 = 9600, 10 = 38.4K, 11 = 115.2K103 ;104 ; 240h/2400baud corresponds to 0 for a PackedPortAndBaud value, which triggers auto detect code.105 ; Which means 240h is not usable, and is why ..._MINPORT is 248h. A value is reserved at the upper106 ; end of the spectrum in case it is needed (whcih is why it is 430h instead of 438h).107 ;108 DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK EQU 0fch109 DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTBITS EQU 03fh110 DEVICE_SERIAL_PACKEDPORTANDBAUD_PORT_FIELD_POSITION EQU 2111 DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT EQU 240h112 DEVICE_SERIAL_PACKEDPORTANDBAUD_MINPORT EQU 248h ; minimum port value that the user can set113 DEVICE_SERIAL_PACKEDPORTANDBAUD_MAXPORT EQU 430h ; or ((..._PORTMASK-1) << 1) + ..._STARTINGPORT114 115 DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK EQU 3h116 DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDBITS EQU 3h117 DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUD_FIELD_POSITION EQU 0118 119 ; Defines for IDEVARS.wSerialPrintBaud120 ;121 ; pppp ppnn nnnn nnnn122 ; unsigned number to output = n123 ; postfix character = p + '0' (designed for '0' and 'K', although other values are possible)124 ;125 ; Note that the contents of this word is only used for printing by the BIOS when a drive is detected.126 ; It is not used for any other purpose, and so long as it conforms to the structure, any values can be used.127 ;128 DEVICE_SERIAL_PRINTBAUD_NUMBERMASK EQU 003ffh129 DEVICE_SERIAL_PRINTBAUD_POSTCHARMASK EQU 0fc00h130 DEVICE_SERIAL_PRINTBAUD_POSTCHARADD EQU '0'131 ;132 ; These are defined here (instead of in the configurator) for consistency since they could also be used133 ; in main.asm as a default for an IDEVARS structure.134 ;135 DEVICE_SERIAL_PRINTBAUD_2400 EQU ((('0'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 240) ; Prints "2400"136 DEVICE_SERIAL_PRINTBAUD_9600 EQU ((('0'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 960) ; Prints "9600"137 DEVICE_SERIAL_PRINTBAUD_38_4 EQU ((('K'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 38) ; Prints "38K"138 DEVICE_SERIAL_PRINTBAUD_115_2 EQU ((('K'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 115) ; Prints "115K"139 108 140 109 ; -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIrq.asm
r161 r233 109 109 ; Reading Status Register acknowledges IDE interrupt 110 110 call RamVars_GetSegmentToDS 111 call FindDPT_ToDSDIforInterruptInService 111 mov bl, FLGH_DPT_INTERRUPT_IN_SERVICE 112 call FindDPT_ToDSDIforFlagsHighInBL 112 113 mov dl, STATUS_REGISTER_in 113 114 call IdeIO_InputToALfromIdeRegisterInDL -
trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm
r226 r233 17 17 ; 18 18 ; Values for UART_divisorLow: 19 ; 60h = 1200, 30h = 2400, 18h = 4800, 0ch = 9600, 6 = 19200, 3 = 38400, 2 = 57600, 1 = 11520019 ; 60h = 1200, 30h = 2400, 18h = 4800, 0ch = 9600, 6 = 19200, 4 = 28800, 3 = 38400, 2 = 57600, 1 = 115200 20 20 ; 21 21 SerialCommand_UART_divisorLow EQU 0 22 23 ;24 ; We support 4 baud rates, starting here going higher and skipping every other baud rate25 ; Starting with 30h, that means 30h (1200 baud), 0ch (9600 baud), 3 (38400 baud), and 1 (115200 baud)26 ; Note: hardware baud multipliers (2x, 4x) will impact the final baud rate and are not known at this level27 ;28 SerialCommand_UART_divisorLow_startingBaud EQU 030h29 30 SerialCommand_UART_interruptEnable EQU 131 22 32 23 ; … … 91 82 mov [bp+IDEPACK.bFeatures],ah ; store protocol command 92 83 93 mov d l, byte [di+DPT_SERIAL.bSerialPortAndBaud]84 mov dx, [di+DPT_SERIAL.wSerialPortAndBaud] 94 85 95 86 ; fall-through 96 87 97 88 ;-------------------------------------------------------------------- 98 ; SerialCommand_OutputWithParameters_DeviceInD L89 ; SerialCommand_OutputWithParameters_DeviceInDX 99 90 ; Parameters: 100 91 ; AH: Protocol Command 101 ; D L: Packed I/O port and baud rate92 ; DX: Packed I/O port and baud rate 102 93 ; ES:SI: Ptr to buffer (for data transfer commands) 103 94 ; SS:BP: Ptr to IDEREGS_AND_INTPACK … … 108 99 ; AL, BX, CX, DX, (ES:SI for data transfer commands) 109 100 ;-------------------------------------------------------------------- 110 SerialCommand_OutputWithParameters_DeviceInD L:101 SerialCommand_OutputWithParameters_DeviceInDX: 111 102 112 103 push si … … 116 107 ; 117 108 ; Unpack I/O port and baud from DPT 118 ; Port to DX more or less for the remainder of the routine109 ; Port to DX for the remainder of the routine (+/- different register offsets) 119 110 ; Baud in CH until UART initialization is complete 120 111 ; 121 mov dh, ((DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT & 0f00h) >> (8+1)) 122 shl dx, 1 ; port offset already x4, needs one more shift to be x8 123 mov cl, dl 124 125 and cl, (DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK << 1) 126 mov ch, SerialCommand_UART_divisorLow_startingBaud 127 shr ch, cl 128 adc ch, 0 129 130 and dl, ((DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK << 1) & 0ffh) 131 add dx, byte (DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT & 0ffh) 132 112 mov ch,dh 113 xor dh,dh 114 eSHL_IM dx, 2 ; shift from one byte to two 115 133 116 mov al,[bp+IDEPACK.bSectorCount] 134 117 … … 414 397 ; taken care of this, but I have seen cases where this is not true. 415 398 ; 399 xor cx,cx ; timeout this clearing routine, in case the UART isn't there 416 400 .clearBuffer: 417 401 mov dl,bh … … 420 404 test al,08fh 421 405 jz .clearBufferComplete 422 shral,1406 test al,1 423 407 in al,dx 424 jc .clearBuffer ; note CF from shrabove408 loopnz .clearBuffer ; note ZF from test above 425 409 426 410 .clearBufferComplete: … … 641 625 ; master scan. 642 626 ; 643 mov dl,[cs:bp+IDEVARS.bSerialPackedPortAndBaud] 644 mov al, byte [RAMVARS.xlateVars+XLATEVARS.bLastSerial] 627 mov cx,1 ; 1 sector to move, 0 for non-scan 628 mov dx,[cs:bp+IDEVARS.wSerialPortAndBaud] 629 xor ax,ax 630 push si 631 call FindDPT_ToDSDIforSerialDevice 632 pop si 633 jnc .notfounddpt 634 mov ax,[ds:di+DPT_SERIAL.wSerialPortAndBaud] 635 .notfounddpt: 645 636 646 637 test bh, FLG_DRVNHEAD_DRV 647 638 jz .master 648 639 649 test a l,al; Take care of the case that is different between master and slave.640 test ax,ax ; Take care of the case that is different between master and slave. 650 641 jz .error ; Because we do this here, the jz after the "or" below will not be taken 651 642 652 643 ; fall-through 653 644 .master: 654 test d l,dl655 jnz .identifyDeviceInD L656 657 or d l,al; Move bLast into position in dl, as well as test for zero645 test dx,dx 646 jnz .identifyDeviceInDX 647 648 or dx,ax ; Move bLast into position in dl, as well as test for zero 658 649 jz .scanSerial 659 650 660 651 ; fall-through 661 .identifyDeviceInD L:652 .identifyDeviceInDX: 662 653 663 654 push bp ; setup fake IDEREGS_AND_INTPACK … … 665 656 push dx 666 657 667 mov cl,1 ; 1 sector to move668 658 push cx 669 659 … … 674 664 675 665 mov bp,sp 676 call SerialCommand_OutputWithParameters_DeviceInD L666 call SerialCommand_OutputWithParameters_DeviceInDX 677 667 678 668 pop bx … … 680 670 pop cx 681 671 pop dx 682 672 683 673 pop bp 684 674 ; 685 675 ; place packed port/baud in RAMVARS, read by FinalizeDPT and DetectDrives 686 676 ; 687 ; Note that this will be set during an int13h/25h call as well. Which is OK since it is only used (at the 688 ; top of this routine) for drives found during a COM scan, and we only COM scan if there were no other 689 ; COM drives found. So we will only reaffirm the port/baud for the one COM port/baud that has a drive. 690 ; 691 jc .notFound ; only store bLastSerial if success 692 mov byte [RAMVARS.xlateVars+XLATEVARS.bLastSerial], dl 677 mov [es:si+ATA6.wVendor],dx 693 678 694 679 .notFound: … … 714 699 .scanSerial: 715 700 mov di,.scanPortAddresses-1 701 mov ch,1 ; tell server that we are scanning 716 702 717 703 .nextPort: … … 741 727 742 728 ; 743 ; Pack into dl, baud rate starts at 0 744 ; 745 add dx,-(DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) 746 shr dx,1 ; dh is zero at this point, and will be sent to the server, 747 ; so we know this is an auto detect 748 749 jmp .testFirstBaud 750 751 ; 752 ; Walk through 4 possible baud rates 753 ; 729 ; Begin baud rate scan on this port... 730 ; 731 ; On a scan, we support 6 baud rates, starting here and going higher by a factor of two each step, with a 732 ; small jump between 9600 and 38800. These 6 were selected since we wanted to support 9600 baud and 115200, 733 ; *on the server side* if the client side had a 4x clock multiplier, a 2x clock multiplier, or no clock multiplier. 734 ; 735 ; Starting with 30h, that means 30h (2400 baud), 18h (4800 baud), 0ch (9600 baud), and 736 ; 04h (28800 baud), 02h (57600 baud), 01h (115200 baud) 737 ; 738 ; Note: hardware baud multipliers (2x, 4x) will impact the final baud rate and are not known at this level 739 ; 740 mov dh,030h * 2 ; multiply by 2 since we are about to divide by 2 741 mov dl,[cs:di] ; restore single byte port address for scan 742 754 743 .nextBaud: 755 inc dx 756 test dl,3 744 shr dh,1 757 745 jz .nextPort 758 759 .testFirstBaud: 760 call .identifyDeviceInDL 746 cmp dh,6 ; skip from 6 to 4, to move from the top of the 9600 baud range 747 jnz .testBaud ; to the bottom of the 115200 baud range 748 mov dh,4 749 750 .testBaud: 751 call .identifyDeviceInDX 761 752 jc .nextBaud 762 753 -
trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialDPT.asm
r226 r233 17 17 SerialDPT_Finalize: 18 18 or byte [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE 19 mov a l, [RAMVARS.xlateVars+XLATEVARS.bLastSerial]20 mov byte [di+DPT_SERIAL.bSerialPortAndBaud], al19 mov ax, [es:si+ATA6.wVendor] 20 mov word [di+DPT_SERIAL.wSerialPortAndBaud], ax 21 21 ret 22 22 -
trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm
r203 r233 22 22 23 23 .DriveDetectLoop: ; Loop through IDEVARS 24 mov si, g_szDetect ; Setup standard print string 24 push cx 25 26 mov cx, g_szDetectMaster 27 mov bh, MASK_DRVNHEAD_SET ; Select Master drive 28 call StartDetectionWithDriveSelectByteInBHandStringInAX ; Detect and create DPT + BOOTNFO 29 30 mov cx, g_szDetectSlave 31 mov bh, MASK_DRVNHEAD_SET | FLG_DRVNHEAD_DRV 32 call StartDetectionWithDriveSelectByteInBHandStringInAX 33 34 pop cx 35 36 add bp, BYTE IDEVARS_size ; Point to next IDEVARS 37 25 38 %ifdef MODULE_SERIAL 26 cmp byte [cs:bp+IDEVARS.bDevice], DEVICE_SERIAL_PORT 27 jnz .DriveNotSerial ; Special print string for serial drives 28 mov si, g_szDetectCOM 29 .DriveNotSerial: 39 jcxz .done ; Set to zero on .ideVarsSerialAuto iteration (if any) 30 40 %endif 31 32 call .DetectDrives_WithIDEVARS ; Detect Master and Slave 33 add bp, BYTE IDEVARS_size ; Point to next IDEVARS 41 34 42 loop .DriveDetectLoop 35 43 36 44 %ifdef MODULE_SERIAL 37 45 ; 38 ; if serial drive detected, do not scan (avoids duplicate drives and isn't needed - we have a connection) 39 ; Note that XLATEVARS.bLastSerial is zero'd in RamVars_Initialize, called in Initialize_AutoDetectDrives; 40 ; bLastSerial it set in the detection code of SerialCommand.asm 46 ; if serial drive detected, do not scan (avoids duplicate drives and isn't needed - we already have a connection) 41 47 ; 42 cmp byte [RAMVARS.xlateVars+XLATEVARS.bLastSerial],cl ; cx = zero after the loop above 43 ; less instruction bytes than using immediate 44 jnz .done 45 48 call FindDPT_ToDSDIforSerialDevice 49 jc .done 50 51 mov bp, ROMVARS.ideVarsSerialAuto ; Point to our special IDEVARS sructure, just for serial scans 52 46 53 mov al,[cs:ROMVARS.wFlags] ; Configurator set to always scan? 47 54 or al,[es:BDA.bKBFlgs1] ; Or, did the user hold down the ALT key? 48 55 and al,8 ; 8 = alt key depressed, same as FLG_ROMVARS_SERIAL_ALWAYSDETECT 49 jz .done 56 jnz .DriveDetectLoop 57 %endif 50 58 51 mov bp, ROMVARS.ideVarsSerialAuto ; Point to our special IDEVARS sructure, just for serial scans 52 mov si, g_szDetectCOMAuto ; Special, special print string for serial drives during a scan 53 ;;; fall-through 54 %else 59 .done: 55 60 ret 56 %endif57 61 58 62 %if FLG_ROMVARS_SERIAL_SCANDETECT != 8 … … 60 64 %endif 61 65 62 ;--------------------------------------------------------------------63 ; Detects IDE hard disks by using information from IDEVARS.64 ;65 ; DetectDrives_WithIDEVARS66 ; Parameters:67 ; CS:BP: Ptr to IDEVARS68 ; DS: RAMVARS segment69 ; ES: Zero (BDA segment)70 ; SI: Ptr to template string71 ; Returns:72 ; Nothing73 ; Corrupts registers:74 ; AX, BX, DX, SI, DI75 ;--------------------------------------------------------------------76 .DetectDrives_WithIDEVARS:77 push cx78 79 push si80 mov ax, g_szMaster81 mov bh, MASK_DRVNHEAD_SET ; Select Master drive82 call StartDetectionWithDriveSelectByteInBHandStringInAX ; Detect and create DPT + BOOTNFO83 pop si84 85 mov ax, g_szSlave86 mov bh, MASK_DRVNHEAD_SET | FLG_DRVNHEAD_DRV87 call StartDetectionWithDriveSelectByteInBHandStringInAX88 pop cx89 90 .done:91 ret92 93 66 94 67 ;-------------------------------------------------------------------- 95 68 ; StartDetectionWithDriveSelectByteInBHandStringInAX 96 69 ; Parameters: 97 ; AX: Offset to "Master" or "Slave" string98 70 ; BH: Drive Select byte for Drive and Head Register 71 ; CX: Offset to "Master" or "Slave" string 99 72 ; CS:BP: Ptr to IDEVARS for the drive 100 73 ; DS: RAMVARS segment -
trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm
r203 r233 30 30 ; DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP 31 31 ; Parameters: 32 ; CS: AX: Ptr to "Master" or "Slave" string32 ; CS:CX: Ptr to "Master" or "Slave" string 33 33 ; CS:BP: Ptr to IDEVARS 34 34 ; SI: Ptr to template string … … 39 39 ;-------------------------------------------------------------------- 40 40 DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP: 41 push bp 42 mov di, [cs:bp+IDEVARS.wPort] 43 %ifdef MODULE_SERIAL 44 mov cx, [cs:bp+IDEVARS.wSerialPackedPrintBaud] 45 %endif 41 42 mov ax, [cs:bp+IDEVARS.wPort] ; for IDE: AX=port address, DH=.bDevice 43 mov dx, [cs:bp+IDEVARS.bDevice-1] ; for Serial: AL=port address>>2, AH=baud rate 44 ; DL=COM number character, DH=.bDevice 45 46 push bp ; setup stack for call to 47 mov bp, sp ; BootMenuPrint_FormatCSSIfromParamsInSSBP 48 49 push cx ; Push "Master" or "Slave" 46 50 47 mov bp, sp 51 mov cl, (g_szDetectPort-$$) & 0xff ; Setup print string for standard IDE 52 ; Note that we modify only the low order bits of CX a lot here, 53 ; saving code space rather than reloading CX completely. 54 ; This optimization requires that all the g_szDetect* strings are 55 ; on the same 256 byte page, which is checked in strings.asm. 48 56 49 push ax ; Push "Master" or "Slave" 57 cmp dx, DEVICE_SERIAL_PORT << 8 ; Check if this is a serial device, 58 ; And also check if DL is zero, check with the jz below 59 ; This optimization requires that DEVICE_SERIAL_PORT be 60 ; the highest value in the DEVICE_* series, ensuring that 61 ; anything less in the high order bits is a different device. 62 63 jl .pushAndPrint ; CX = string to print, AX = port address, DX won't be used 64 65 mov cl, (g_szDetectCOM-$$) & 0xff ; Setup print string for COM ports 66 push cx ; And push now. We use the fact that format strings can contain 67 ; themselves format strings. 68 69 push dx ; Push COM number character 70 71 mov cl, (g_szDetectCOMAuto-$$) & 0xff ; Setup secondary print string for "Auto" 50 72 51 push di ; Push Port address or COM port number 73 jz .pushAndPrint ; CX = string to print, AX and DX won't be used 74 75 mov cl, (g_szDetectCOMLarge-$$) & 0xff ; Setup secondary print string for "COMn/xx.yK" 52 76 53 %ifdef MODULE_SERIAL 54 ; 55 ; Print baud rate from .wSerialPackedPrintBaud, in two parts - %u and then %c 56 ; 57 mov ax,cx ; Unpack baud rate number 58 and ax,DEVICE_SERIAL_PRINTBAUD_NUMBERMASK 59 push ax 77 mov al,ah ; baud rate divisor to AL 78 cbw ; clear AH, AL will always be less than 128 79 xchg si,ax ; move AX to SI for divide 80 mov ax,1152 ; baud rate to displa is 115200/divisor, the "00" is handled 81 ; in the print strings 82 xor dx,dx ; clear top 16-bits of dividend 83 div si ; and divide... Now AX = baud rate/100, DX = 0 (always a clean divide) 84 85 mov si,10 ; Now separate the whole portion from the fractional for "K" display 86 div si ; and divide... Now AX = baud rate/1000, DX = low order digit 87 88 cmp ax,si ; <= 10: "2400", "9600", etc.; >10: "19.2K", "38.4K", etc. 89 jae .pushAndPrint 60 90 61 mov al,ch ; Unpack baud rate postfix ('0' or 'K') 62 eSHR_IM al,2 ; also effectively masks off the postfix 63 add al,DEVICE_SERIAL_PRINTBAUD_POSTCHARADD 64 push ax 65 %endif 66 91 mov cl, (g_szDetectCOMSmall-$$) & 0xff ; Setup secondary print string for "COMn/XXy00" 92 93 .pushAndPrint: 94 push cx ; Push print string 95 push ax ; Push high order digits, or port address, or N/A 96 push dx ; Push low order digit, or N/A 97 98 mov si, g_szDetectOuter ; Finally load SI with wrapper string "IDE %s at %s: " 99 67 100 jmp short DetectPrint_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay 68 101 … … 92 125 93 126 127 -
trunk/XTIDE_Universal_BIOS/Src/Main.asm
r229 r233 112 112 %ifdef MODULE_SERIAL 113 113 at ROMVARS.ideVarsSerialAuto+IDEVARS.bDevice, db DEVICE_SERIAL_PORT 114 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE115 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE116 114 %endif 117 115 %else … … 145 143 %ifdef MODULE_SERIAL 146 144 at ROMVARS.ideVarsSerialAuto+IDEVARS.bDevice, db DEVICE_SERIAL_PORT 147 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE148 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE149 145 %endif 150 146 %endif -
trunk/XTIDE_Universal_BIOS/Src/Strings.asm
r197 r233 12 12 g_szRomAt: db "%s @ %x",LF,CR,NULL 13 13 14 g_szMaster: db "IDE Master at ",NULL 15 g_szSlave: db "IDE Slave at ",NULL 16 g_szDetect: db "%s%x: ",NULL ; IDE Master at 1F0h: 17 g_szDetectCOM: db "%sCOM%c/%u%c: ",NULL ; IDE Master at COM1/115K: 18 g_szDetectCOMAuto: db "%sCOM Detect: ",NULL ; IDE Master at COM Detect: 14 ; The following strings are used by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP 15 ; To support an optimization in that code, these strings must start on the same 256 byte page, 16 ; which is checked at assembly time below. 17 ; 18 g_szDetectStart: 19 g_szDetectMaster: db "Master",NULL 20 g_szDetectSlave: db "Slave ",NULL 21 g_szDetectOuter: db "IDE %s at %s: ",NULL 22 g_szDetectPort: db "%x",NULL ; IDE Master at 1F0h: 23 g_szDetectCOM: db "COM%c%s",NULL 24 g_szDetectCOMAuto: db " Auto",NULL 25 g_szDetectCOMSmall: db "/%u%u00",NULL ; IDE Master at COM1/9600: 26 g_szDetectEnd: 27 g_szDetectCOMLarge: db "/%u.%uK",NULL ; IDE Master at COM1/19.2K: 28 29 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 30 %if ((g_szDetectEnd-$$) & 0xff00) <> ((g_szDetectStart-$$) & 0xff00) 31 %error "g_szDetect* strings must be on the same 256 byte page, required by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP. Please move this block up or down within strings.asm" 32 %endif 33 %endif 19 34 20 35 ; Boot loader strings … … 137 152 ;$translate{200} = 18; # DOUBLE_BOTTOM_LEFT_CORNER 138 153 ;$translate{181} = 19; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL 154 ;$translate{ord('0')} = 20; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL 139 155 ; 140 156 ; Formats begin immediately after the last Translated character (they are in the same table) 141 157 ; 142 ;$format_begin = 2 0;158 ;$format_begin = 21; 143 159 ; 144 ;$format{"s"} = 20; # n/a145 160 ;$format{"c"} = 21; # n/a 146 161 ;$format{"2-I"} = 22; # must be even … … 152 167 ;$format{"2-u"} = 28; # must be even 153 168 ;$format{"A"} = 29; # n/a 169 ;$format{"s"} = 30; # n/a 154 170 ; 155 171 ; NOTE: The last $format cannot exceed 31 (stored in a 5-bit quantity). -
trunk/XTIDE_Universal_BIOS/Src/StringsCompressed.asm
r197 r233 20 20 g_szRomAt: ; db "%s @ %x",LF,CR,NULL 21 21 ; db 25h, 73h, 20h, 40h, 20h, 25h, 78h, 0ah, 0dh, 00h ; uncompressed 22 db 34h, 20h, 0c6h, 39h, 1bh ; compressed 23 24 25 g_szMaster: ; db "IDE Master at ",NULL 26 ; db 49h, 44h, 45h, 20h, 4dh, 61h, 73h, 74h, 65h, 72h, 20h, 61h, 74h, 20h, 00h ; uncompressed 27 db 4fh, 4ah, 0cbh, 53h, 67h, 79h, 7ah, 6bh, 0f8h, 67h, 7ah, 00h ; compressed 28 29 g_szSlave: ; db "IDE Slave at ",NULL 30 ; db 49h, 44h, 45h, 20h, 53h, 6ch, 61h, 76h, 65h, 20h, 20h, 61h, 74h, 20h, 00h ; uncompressed 31 db 4fh, 4ah, 0cbh, 59h, 72h, 67h, 7ch, 0ebh, 20h, 67h, 7ah, 00h ; compressed 32 33 g_szDetect: ; db "%s%x: ",NULL ; IDE Master at 1F0h: 34 ; db 25h, 73h, 25h, 78h, 3ah, 20h, 00h ; uncompressed 35 db 34h, 39h, 40h, 00h ; compressed 36 37 g_szDetectCOM: ; db "%sCOM%c/%u%c: ",NULL ; IDE Master at COM1/115K: 38 ; db 25h, 73h, 43h, 4fh, 4dh, 25h, 63h, 2fh, 25h, 75h, 25h, 63h, 3ah, 20h, 00h ; uncompressed 39 db 34h, 49h, 55h, 53h, 35h, 2ah, 37h, 35h, 40h, 00h ; compressed 40 41 g_szDetectCOMAuto: ; db "%sCOM Detect: ",NULL ; IDE Master at COM Detect: 42 ; db 25h, 73h, 43h, 4fh, 4dh, 20h, 44h, 65h, 74h, 65h, 63h, 74h, 3ah, 20h, 00h ; uncompressed 43 db 34h, 49h, 55h, 0d3h, 4ah, 6bh, 7ah, 6bh, 69h, 7ah, 40h, 00h ; compressed 44 22 db 3eh, 20h, 0c6h, 39h, 1bh ; compressed 23 24 25 ; The following strings are used by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP 26 ; To support an optimization in that code, these strings must start on the same 256 byte page, 27 ; which is checked at assembly time below. 28 ; 29 g_szDetectStart: 30 g_szDetectMaster: ; db "Master",NULL 31 ; db 4dh, 61h, 73h, 74h, 65h, 72h, 00h ; uncompressed 32 db 53h, 67h, 79h, 7ah, 6bh, 0b8h ; compressed 33 34 g_szDetectSlave: ; db "Slave ",NULL 35 ; db 53h, 6ch, 61h, 76h, 65h, 20h, 00h ; uncompressed 36 db 59h, 72h, 67h, 7ch, 6bh, 00h ; compressed 37 38 g_szDetectOuter: ; db "IDE %s at %s: ",NULL 39 ; db 49h, 44h, 45h, 20h, 25h, 73h, 20h, 61h, 74h, 20h, 25h, 73h, 3ah, 20h, 00h ; uncompressed 40 db 4fh, 4ah, 0cbh, 3eh, 20h, 67h, 0fah, 3eh, 40h, 00h ; compressed 41 42 g_szDetectPort: ; db "%x",NULL ; IDE Master at 1F0h: 43 ; db 25h, 78h, 00h ; uncompressed 44 db 19h ; compressed 45 46 g_szDetectCOM: ; db "COM%c%s",NULL 47 ; db 43h, 4fh, 4dh, 25h, 63h, 25h, 73h, 00h ; uncompressed 48 db 49h, 55h, 53h, 35h, 1eh ; compressed 49 50 g_szDetectCOMAuto: ; db " Auto",NULL 51 ; db 20h, 41h, 75h, 74h, 6fh, 00h ; uncompressed 52 db 20h, 47h, 7bh, 7ah, 0b5h ; compressed 53 54 g_szDetectCOMSmall: ; db "/%u%u00",NULL ; IDE Master at COM1/9600: 55 ; db 2fh, 25h, 75h, 25h, 75h, 30h, 30h, 00h ; uncompressed 56 db 2ah, 37h, 37h, 34h, 14h ; compressed 57 58 g_szDetectEnd: 59 g_szDetectCOMLarge: ; db "/%u.%uK",NULL ; IDE Master at COM1/19.2K: 60 ; db 2fh, 25h, 75h, 2eh, 25h, 75h, 4bh, 00h ; uncompressed 61 db 2ah, 37h, 29h, 37h, 91h ; compressed 62 63 64 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 65 %if ((g_szDetectEnd-$$) & 0xff00) <> ((g_szDetectStart-$$) & 0xff00) 66 %error "g_szDetect* strings must be on the same 256 byte page, required by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP. Please move this block up or down within strings.asm" 67 %endif 68 %endif 45 69 46 70 ; Boot loader strings 47 71 g_szTryToBoot: ; db "Booting from %s %x",ANGLE_QUOTE_RIGHT,"%x",LF,CR,NULL 48 72 ; db 42h, 6fh, 6fh, 74h, 69h, 6eh, 67h, 20h, 66h, 72h, 6fh, 6dh, 20h, 25h, 73h, 20h, 25h, 78h, 0afh, 25h, 78h, 0ah, 0dh, 00h ; uncompressed 49 db 48h, 75h, 75h, 7ah, 6fh, 74h, 0edh, 6ch, 78h, 75h, 0f3h, 3 4h, 20h, 39h, 24h, 39h, 1bh ; compressed73 db 48h, 75h, 75h, 7ah, 6fh, 74h, 0edh, 6ch, 78h, 75h, 0f3h, 3eh, 20h, 39h, 24h, 39h, 1bh ; compressed 50 74 51 75 g_szBootSectorNotFound: ; db "Boot sector " … … 77 101 g_szHotkey: ; db "%A%c%c%A%s%A ",NULL 78 102 ; db 25h, 41h, 25h, 63h, 25h, 63h, 25h, 41h, 25h, 73h, 25h, 41h, 20h, 00h ; uncompressed 79 db 3dh, 35h, 35h, 3dh, 3 4h, 3dh, 00h ; compressed103 db 3dh, 35h, 35h, 3dh, 3eh, 3dh, 00h ; compressed 80 104 81 105 … … 88 112 g_szFDLetter: ; db "%s %c",NULL 89 113 ; db 25h, 73h, 20h, 25h, 63h, 00h ; uncompressed 90 db 3 4h, 20h, 15h ; compressed114 db 3eh, 20h, 15h ; compressed 91 115 92 116 g_szFloppyDrv: ; db "Floppy Drive",NULL … … 106 130 g_szSizeSingle: ; db "%s%u.%u %ciB",NULL 107 131 ; db 25h, 73h, 25h, 75h, 2eh, 25h, 75h, 20h, 25h, 63h, 69h, 42h, 00h ; uncompressed 108 db 3 4h, 37h, 29h, 37h, 20h, 35h, 6fh, 88h ; compressed132 db 3eh, 37h, 29h, 37h, 20h, 35h, 6fh, 88h ; compressed 109 133 110 134 g_szSizeDual: ; db "%s%5-u.%u %ciB /%5-u.%u %ciB",LF,CR,NULL 111 135 ; db 25h, 73h, 25h, 35h, 2dh, 75h, 2eh, 25h, 75h, 20h, 25h, 63h, 69h, 42h, 20h, 2fh, 25h, 35h, 2dh, 75h, 2eh, 25h, 75h, 20h, 25h, 63h, 69h, 42h, 0ah, 0dh, 00h ; uncompressed 112 db 3 4h, 38h, 29h, 37h, 20h, 35h, 6fh, 0c8h, 2ah, 38h, 29h, 37h, 20h, 35h, 6fh, 48h, 1bh ; compressed136 db 3eh, 38h, 29h, 37h, 20h, 35h, 6fh, 0c8h, 2ah, 38h, 29h, 37h, 20h, 35h, 6fh, 48h, 1bh ; compressed 113 137 114 138 g_szCfgHeader: ; db "Addr.",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus", SINGLE_VERTICAL,"IRQ", SINGLE_VERTICAL,"Reset",LF,CR,NULL … … 118 142 g_szCfgFormat: ; db "%s" ,SINGLE_VERTICAL,"%5-u", SINGLE_VERTICAL,"%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x", NULL 119 143 ; db 25h, 73h, 0b3h, 25h, 35h, 2dh, 75h, 0b3h, 25h, 73h, 0b3h, 20h, 25h, 32h, 2dh, 49h, 0b3h, 25h, 35h, 2dh, 78h, 00h ; uncompressed 120 db 3 4h, 23h, 38h, 23h, 34h, 23h, 20h, 36h, 23h, 1ah ; compressed144 db 3eh, 23h, 38h, 23h, 3eh, 23h, 20h, 36h, 23h, 1ah ; compressed 121 145 122 146 … … 159 183 g_szFddUnknown: ; db "%sUnknown",NULL 160 184 ; db 25h, 73h, 55h, 6eh, 6bh, 6eh, 6fh, 77h, 6eh, 00h ; uncompressed 161 db 3 4h, 5bh, 74h, 71h, 74h, 75h, 7dh, 0b4h ; compressed185 db 3eh, 5bh, 74h, 71h, 74h, 75h, 7dh, 0b4h ; compressed 162 186 163 187 g_szFddSizeOr: ; db "%s5",ONE_QUARTER,QUOTATION_MARK," or 3",ONE_HALF,QUOTATION_MARK," DD",NULL 164 188 ; db 25h, 73h, 35h, 0ach, 22h, 20h, 6fh, 72h, 20h, 33h, 0abh, 22h, 20h, 44h, 44h, 00h ; uncompressed 165 db 3 4h, 2fh, 21h, 26h, 20h, 75h, 0f8h, 2dh, 22h, 26h, 20h, 4ah, 8ah ; compressed189 db 3eh, 2fh, 21h, 26h, 20h, 75h, 0f8h, 2dh, 22h, 26h, 20h, 4ah, 8ah ; compressed 166 190 167 191 g_szFddSize: ; db "%s%s",QUOTATION_MARK,", %u kiB",NULL ; 3½", 1440 kiB 168 192 ; db 25h, 73h, 25h, 73h, 22h, 2ch, 20h, 25h, 75h, 20h, 6bh, 69h, 42h, 00h ; uncompressed 169 db 3 4h, 34h, 26h, 27h, 20h, 37h, 20h, 71h, 6fh, 88h ; compressed193 db 3eh, 3eh, 26h, 27h, 20h, 37h, 20h, 71h, 6fh, 88h ; compressed 170 194 171 195 … … 265 289 ;$translate{200} = 18; # DOUBLE_BOTTOM_LEFT_CORNER [StringsCompress Processed] 266 290 ;$translate{181} = 19; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL [StringsCompress Processed] 291 ;$translate{ord('0')} = 20; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL [StringsCompress Processed] 267 292 ; 268 293 ; Formats begin immediately after the last Translated character (they are in the same table) 269 294 ; 270 ;$format_begin = 20; [StringsCompress Processed] 271 ; 272 ;$format{"s"} = 20; # n/a [StringsCompress Processed] 295 ;$format_begin = 21; [StringsCompress Processed] 296 ; 273 297 ;$format{"c"} = 21; # n/a [StringsCompress Processed] 274 298 ;$format{"2-I"} = 22; # must be even [StringsCompress Processed] … … 280 304 ;$format{"2-u"} = 28; # must be even [StringsCompress Processed] 281 305 ;$format{"A"} = 29; # n/a [StringsCompress Processed] 306 ;$format{"s"} = 30; # n/a [StringsCompress Processed] 282 307 ; 283 308 ; NOTE: The last $format cannot exceed 31 (stored in a 5-bit quantity). … … 299 324 StringsCompressed_NormalBase equ 58 300 325 301 StringsCompressed_FormatsBegin equ 2 0326 StringsCompressed_FormatsBegin equ 21 302 327 303 328 StringsCompressed_TranslatesAndFormats: … … 322 347 db 200 ; 18 323 348 db 181 ; 19 324 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_s); 20349 db 48 ; 20 325 350 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_c) ; 21 326 351 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_2_I) ; 22 … … 332 357 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_2_u) ; 28 333 358 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_A) ; 29 359 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_s) ; 30 334 360 335 361 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 362 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_c || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_c > 255 363 %error "DisplayFormatCompressed_Format_c is out of range of DisplayFormatCompressed_BaseFormatOffset" 364 %endif 365 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_2_I || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_2_I > 255 366 %error "DisplayFormatCompressed_Format_2_I is out of range of DisplayFormatCompressed_BaseFormatOffset" 367 %endif 368 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_u || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_u > 255 369 %error "DisplayFormatCompressed_Format_u is out of range of DisplayFormatCompressed_BaseFormatOffset" 370 %endif 371 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_5_u || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_5_u > 255 372 %error "DisplayFormatCompressed_Format_5_u is out of range of DisplayFormatCompressed_BaseFormatOffset" 373 %endif 374 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_x || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_x > 255 375 %error "DisplayFormatCompressed_Format_x is out of range of DisplayFormatCompressed_BaseFormatOffset" 376 %endif 377 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_5_x || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_5_x > 255 378 %error "DisplayFormatCompressed_Format_5_x is out of range of DisplayFormatCompressed_BaseFormatOffset" 379 %endif 380 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_nl || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_nl > 255 381 %error "DisplayFormatCompressed_Format_nl is out of range of DisplayFormatCompressed_BaseFormatOffset" 382 %endif 383 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_2_u || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_2_u > 255 384 %error "DisplayFormatCompressed_Format_2_u is out of range of DisplayFormatCompressed_BaseFormatOffset" 385 %endif 386 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_A || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_A > 255 387 %error "DisplayFormatCompressed_Format_A is out of range of DisplayFormatCompressed_BaseFormatOffset" 388 %endif 336 389 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_s || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_s > 255 337 390 %error "DisplayFormatCompressed_Format_s is out of range of DisplayFormatCompressed_BaseFormatOffset" 338 %endif339 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_c || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_c > 255340 %error "DisplayFormatCompressed_Format_c is out of range of DisplayFormatCompressed_BaseFormatOffset"341 %endif342 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_2_I || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_2_I > 255343 %error "DisplayFormatCompressed_Format_2_I is out of range of DisplayFormatCompressed_BaseFormatOffset"344 %endif345 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_u || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_u > 255346 %error "DisplayFormatCompressed_Format_u is out of range of DisplayFormatCompressed_BaseFormatOffset"347 %endif348 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_5_u || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_5_u > 255349 %error "DisplayFormatCompressed_Format_5_u is out of range of DisplayFormatCompressed_BaseFormatOffset"350 %endif351 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_x || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_x > 255352 %error "DisplayFormatCompressed_Format_x is out of range of DisplayFormatCompressed_BaseFormatOffset"353 %endif354 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_5_x || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_5_x > 255355 %error "DisplayFormatCompressed_Format_5_x is out of range of DisplayFormatCompressed_BaseFormatOffset"356 %endif357 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_nl || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_nl > 255358 %error "DisplayFormatCompressed_Format_nl is out of range of DisplayFormatCompressed_BaseFormatOffset"359 %endif360 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_2_u || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_2_u > 255361 %error "DisplayFormatCompressed_Format_2_u is out of range of DisplayFormatCompressed_BaseFormatOffset"362 %endif363 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_A || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_A > 255364 %error "DisplayFormatCompressed_Format_A is out of range of DisplayFormatCompressed_BaseFormatOffset"365 391 %endif 366 392 %endif … … 374 400 ;; 5-u:3 375 401 ;; x:6 402 ;; s:15 376 403 ;; 5-x:1 377 ;; s:15378 404 ;; nl:6 379 405 ;; 2-I:1 380 ;; c: 8381 ;; u: 6406 ;; c:7 407 ;; u:9 382 408 ;; total format: 10 383 409 384 410 ;; alphabet usage stats 385 ;; 58,:: 4411 ;; 58,::2 386 412 ;; 59,;: 387 413 ;; 60,<: … … 390 416 ;; 63,?: 391 417 ;; 64,@:1 392 ;; 65,A: 3418 ;; 65,A:4 393 419 ;; 66,B:11 394 ;; 67,C: 5395 ;; 68,D:1 2396 ;; 69,E: 4420 ;; 67,C:4 421 ;; 68,D:10 422 ;; 69,E:3 397 423 ;; 70,F:3 398 424 ;; 71,G: 399 425 ;; 72,H:4 400 ;; 73,I: 3426 ;; 73,I:2 401 427 ;; 74,J: 402 ;; 75,K: 428 ;; 75,K:1 403 429 ;; 76,L:3 404 ;; 77,M: 4430 ;; 77,M:3 405 431 ;; 78,N: 406 ;; 79,O: 3432 ;; 79,O:2 407 433 ;; 80,P:1 408 434 ;; 81,Q:1 … … 422 448 ;; 95,_: 423 449 ;; 96,`: 424 ;; 97,a: 7450 ;; 97,a:6 425 451 ;; 98,b: 426 ;; 99,c: 5452 ;; 99,c:4 427 453 ;; 100,d:4 428 ;; 101,e: 11454 ;; 101,e:9 429 455 ;; 102,f:2 430 456 ;; 103,g:2 … … 436 462 ;; 109,m:1 437 463 ;; 110,n:9 438 ;; 111,o:1 7464 ;; 111,o:18 439 465 ;; 112,p:3 440 466 ;; 113,q: 441 467 ;; 114,r:11 442 468 ;; 115,s:6 443 ;; 116,t:1 3444 ;; 117,u: 2469 ;; 116,t:11 470 ;; 117,u:3 445 471 ;; 118,v:2 446 472 ;; 119,w:1 447 473 ;; 120,x: 448 474 ;; 121,y:2 449 ;; alphabet used count: 39475 ;; alphabet used count: 40 -
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/FindDPT.asm
r203 r233 124 124 125 125 ;-------------------------------------------------------------------- 126 ; IterateToDptWith InterruptInServiceFlagSet126 ; IterateToDptWithFlagsHighInBL 127 127 ; Parameters: 128 128 ; DS:DI: Ptr to DPT to examine 129 ; BL: Bit(s) to test in DPT.bFlagsHigh 129 130 ; Returns: 130 131 ; CF: Set if wanted DPT found … … 134 135 ;-------------------------------------------------------------------- 135 136 ALIGN JUMP_ALIGN 136 IterateToDptWith InterruptInServiceFlagSet:137 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_INTERRUPT_IN_SERVICE; Clears CF (but we need the clc138 137 IterateToDptWithFlagsHighInBL: 138 test BYTE [di+DPT.bFlagsHigh], bl ; Clears CF (but we need the clc 139 ; below anyway for callers above) 139 140 jnz SHORT ReturnRightDPT 140 141 … … 144 145 145 146 ;-------------------------------------------------------------------- 146 ; FindDPT_ToDSDIfor InterruptInService147 ; FindDPT_ToDSDIforSerialDevice 147 148 ; Parameters: 148 149 ; DS: RAMVARS segment … … 154 155 ; SI 155 156 ;-------------------------------------------------------------------- 156 ALIGN JUMP_ALIGN 157 FindDPT_ToDSDIforInterruptInService: 158 mov si, IterateToDptWithInterruptInServiceFlagSet 157 ALIGN JUMP_ALIGN 158 FindDPT_ToDSDIforSerialDevice: 159 mov bl, FLGH_DPT_SERIAL_DEVICE 160 ; fall-through 161 162 ;-------------------------------------------------------------------- 163 ; FindDPT_ToDSDIforFlagsHigh 164 ; Parameters: 165 ; DS: RAMVARS segment 166 ; BL: Bit(s) to test in DPT.bFlagsHigh 167 ; Returns: 168 ; DS:DI: Ptr to DPT 169 ; CF: Set if wanted DPT found 170 ; Cleared if DPT not found 171 ; Corrupts registers: 172 ; SI 173 ;-------------------------------------------------------------------- 174 ALIGN JUMP_ALIGN 175 FindDPT_ToDSDIforFlagsHighInBL: 176 mov si, IterateToDptWithFlagsHighInBL 159 177 ; Fall to IterateAllDPTs 160 178 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/IDE_SerialBaud.txt
r202 r233 1 Supported baud rates are 2400, 9600, 38.4K, and 115.2K. The server must also be set to this same speed. Older UARTs may only support 2400 and 9600 baud, but sometimes can be pushed to 38.4K. 115.2K will likely only be possible with a newer UART that inclues a FIFO. Some high speed serial ports include UART clock multipliers, allowing for speeds at 230.4K (2x multiplier) and 460.8K (4x multiplier). These high speeds are supported by these BIOS, even on original 4.77MHz 8088 systems. Note that UART clock multipliers are not detectable by the software and 115.2K will still be used during configuration for high speeds; but if a multiplier is used, the actual speed (including the multiplier) will need to be used onthe server.1 Supported baud rates are 2400, 4800, 9600, 19.2K, 28.8K, 38.4K, 57.6K, and 115.2K. The server must also be set to this same speed. Older UARTs may only support up to 9600 baud, but sometimes can be pushed to 38.4K. 115.2K will likely only be possible with a newer UART that inclues a FIFO. Some high speed serial ports include UART clock multipliers, allowing for speeds at 230.4K (2x multiplier) and 460.8K (4x multiplier) above 115.2K. These high speeds are supported by these BIOS, even on original 4.77MHz 8088 systems. Note that UART clock multipliers are not detectable by the software and 115.2K will still be used during configuration for high speeds; but if a multiplier is used, the actual speed (including the multiplier) will need to be used by the server. -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/IDE_SerialCOM.txt
r202 r233 1 Select a serial port by COM port number. COM1 through COM4 have well established I/O port assignments, COM5 and onward are less well established. "COMA" represents COM10, "COMB" represents COM11, and "COMC" represents COM12. Selecting COMxenables the manual selection of an I/O port address.1 Select a serial port by COM port number. COM1 through COM4 have well established I/O port assignments, COM5 and onward are less well established. "COMA" represents COM10, "COMB" represents COM11, and "COMC" represents COM12. Selecting "COMx" enables the manual selection of an I/O port address. -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/IDE_SerialPort.txt
r203 r233 1 Select a serial port by I/O address. Supported values are between 240h and 430h, and must be on an 8-byte boundary. If the entered value corresponds to one of the established COM port numbers, then the selection of serial port will use COM numbers instead.1 Select a serial port by I/O address. Any port address is supported up to 3f8h, but must be on an 8-byte boundary. If the entered value corresponds to one of the established COM port numbers, then the selection will snap to that COM port and "COMx" must be selected again for custom I/O address entry. -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc
r199 r233 30 30 FLG_MENUITEM_BYTEVALUE EQU (1<<3) ; Item value is single byte 31 31 FLG_MENUITEM_PROGRAMVAR EQU (1<<4) ; Item is for configuring program, not BIOS 32 FLG_MENUITEM_CHOICESTRINGS EQU (1<<5) ; ChoiceToStringLookup table is 1-1 with ChoiceToValueLookup table, 33 ; ChoiceToStringLookup table must also NULL terminated 32 34 33 35 ; Values for MENUITEM.bType … … 47 49 .rgwChoiceToValueLookup resb 2 ; Ptr to lookup table for translating selected choice to actual value 48 50 .rgszValueToStringLookup: ; Ptr to lookup table for translating value to string 51 .rgszChoiceToStringLookup: 49 52 .wMinValue resb 2 ; Minimum allowed integer value 50 53 .wMaxValue: -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
r199 r233 289 289 mov ax, [es:di] 290 290 291 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE 292 jz SHORT .NoConvertWordToByteValue 293 xor ah, ah ; conversion needs to happen before call to the reader, 294 ; in case the reader unpacks the byte to a word 295 296 .NoConvertWordToByteValue: 291 297 mov bx, [si+MENUITEM.itemValue+ITEM_VALUE.fnValueReader] 292 298 test bx,bx … … 300 306 pop es 301 307 302 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE303 jnz SHORT .ConvertWordToByteValue304 308 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_FLAGVALUE 305 309 jz SHORT .Return … … 309 313 jnz SHORT .Return 310 314 xor ax, ax 311 ALIGN JUMP_ALIGN 312 .ConvertWordToByteValue: 313 xor ah, ah 315 314 316 ALIGN JUMP_ALIGN, ret 315 317 .Return: -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm
r107 r233 156 156 ALIGN JUMP_ALIGN 157 157 MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI: 158 MenuitemPrint_WriteLookupValueStringToBufferInESDIfromRawItemInDSSI: 158 159 call Menuitem_GetValueToAXfromMenuitemInDSSI 159 160 ; Fall to PrintLookupValueFromAXtoBufferInESDI … … 173 174 PrintLookupValueFromAXtoBufferInESDI: 174 175 push si 176 test byte [si+MENUITEM.bFlags], FLG_MENUITEM_CHOICESTRINGS 177 jnz .lookupChoice 178 175 179 add ax, [si+MENUITEM.itemValue+ITEM_VALUE.rgszValueToStringLookup] 176 180 xchg bx, ax 181 .found: 177 182 mov si, [bx] 183 .errorReturn: 178 184 call String_CopyDSSItoESDIandGetLengthToCX 179 185 pop si 180 186 ret 181 187 188 ; 189 ; With FLG_MENUITEM_CHOICESTRINGS, the array at .rgszChoiceToStringLookup is based on the 190 ; Choice number (offset within .rgwChoiceToValueLookup) instead of the value stored. 191 ; Here, we scan the .rgwChoiceToValueLookup array until we find the value there, and then 192 ; use the same offset in .rgszChoiceToStringLookup. If we don't find the value, we 193 ; return an "Error!" string instead. 194 ; 195 ; Note that the pointer array at .rgszChoiceToStringLookup must be NULL terminated. Since the 196 ; value could be zero, we don't use the .rgwChoiceToValueLookup array to find the end. 197 ; 198 .lookupChoice: 199 mov bx,[si+MENUITEM.itemValue+ITEM_VALUE.rgszChoiceToStringLookup] 200 mov si,[si+MENUITEM.itemValue+ITEM_VALUE.rgwChoiceToValueLookup] 201 202 .wordLoop: 203 cmp ax,[si] 204 jz .found 205 inc si 206 inc si 207 inc bx 208 inc bx 209 cmp word [bx],0 210 jnz .wordLoop 211 212 mov si,g_szValueUnknownError 213 jmp .errorReturn 182 214 183 215 ;-------------------------------------------------------------------- -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm
r200 r233 46 46 istruc MENUITEM 47 47 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI 48 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfrom ShiftedItemInDSSI48 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromRawItemInDSSI 49 49 at MENUITEM.szName, dw g_szItemIdeDevice 50 50 at MENUITEM.szQuickInfo, dw g_szNfoIdeDevice … … 93 93 istruc MENUITEM 94 94 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI 95 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfrom UnshiftedItemInDSSI95 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromRawItemInDSSI 96 96 at MENUITEM.szName, dw g_szItemSerialCOM 97 97 at MENUITEM.szQuickInfo, dw g_szNfoIdeSerialCOM 98 98 at MENUITEM.szHelp, dw g_szHelpIdeSerialCOM 99 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU 99 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_BYTEVALUE | FLG_MENUITEM_CHOICESTRINGS 100 100 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE 101 101 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL 102 102 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDevice 103 103 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szSerialCOMChoice 104 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw NULL 105 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForCOM 106 at MENUITEM.itemValue + ITEM_VALUE.fnValueReader, dw IdeControllerMenu_SerialReadCOM 104 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw g_rgbChoiceToValueLookupForCOM 105 at MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup, dw g_rgszChoiceToStringLookupForCOM 107 106 at MENUITEM.itemValue + ITEM_VALUE.fnValueWriter, dw IdeControllerMenu_SerialWriteCOM 108 107 iend … … 115 114 at MENUITEM.szQuickInfo, dw g_szNfoIdeSerialPort 116 115 at MENUITEM.szHelp, dw g_szHelpIdeSerialPort 117 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU 116 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_BYTEVALUE 118 117 at MENUITEM.bType, db TYPE_MENUITEM_HEX 119 118 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL 120 119 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgIdeCmdPort 121 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw DEVICE_SERIAL_PACKEDPORTANDBAUD_MINPORT122 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw DEVICE_SERIAL_PACKEDPORTANDBAUD_MAXPORT120 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 8h 121 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw 3f8h 123 122 at MENUITEM.itemValue + ITEM_VALUE.fnValueReader, dw IdeControllerMenu_SerialReadPort 124 123 at MENUITEM.itemValue + ITEM_VALUE.fnValueWriter, dw IdeControllerMenu_SerialWritePort … … 128 127 istruc MENUITEM 129 128 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI 130 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfrom UnshiftedItemInDSSI129 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromRawItemInDSSI 131 130 at MENUITEM.szName, dw g_szItemSerialBaud 132 131 at MENUITEM.szQuickInfo, dw g_szNfoIdeSerialBaud 133 132 at MENUITEM.szHelp, dw g_szHelpIdeSerialBaud 133 at MENUITEM.bFlags, db FLG_MENUITEM_BYTEVALUE | FLG_MENUITEM_CHOICESTRINGS 134 134 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE 135 135 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL 136 136 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDevice 137 137 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szSerialBaudChoice 138 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw NULL 139 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForBaud 140 at MENUITEM.itemValue + ITEM_VALUE.fnValueReader, dw IdeControllerMenu_SerialReadBaud 141 at MENUITEM.itemValue + ITEM_VALUE.fnValueWriter, dw IdeControllerMenu_SerialWriteBaud 138 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw g_rgbChoiceToValueLookupForBaud 139 at MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup, dw g_rgszChoiceToStringLookupForBaud 142 140 iend 143 141 … … 188 186 dw g_szValueCfgDeviceSerial 189 187 190 g_rgszValueToStringLookupForCOM: 188 g_rgbChoiceToValueLookupForCOM: 189 dw '1' 190 dw '2' 191 dw '3' 192 dw '4' 193 dw '5' 194 dw '6' 195 dw '7' 196 dw '8' 197 dw '9' 198 dw 'A' 199 dw 'B' 200 dw 'C' 201 dw 'x' ; must be last entry (see reader/write routines) 202 g_rgszChoiceToStringLookupForCOM: 191 203 dw g_szValueCfgCOM1 192 204 dw g_szValueCfgCOM2 … … 202 214 dw g_szValueCfgCOMC 203 215 dw g_szValueCfgCOMx 204 205 g_rgszValueToStringLookupForBaud: 206 dw g_szValueCfgBaud2400 207 dw g_szValueCfgBaud9600 208 dw g_szValueCfgBaud38_4 209 dw g_szValueCfgBaud115_2 210 211 g_wPrintBaud: 212 dw DEVICE_SERIAL_PRINTBAUD_2400 213 dw DEVICE_SERIAL_PRINTBAUD_9600 214 dw DEVICE_SERIAL_PRINTBAUD_38_4 215 dw DEVICE_SERIAL_PRINTBAUD_115_2 216 dw NULL 217 218 DEVICE_SERIAL_DEFAULT_CUSTOM_PORT EQU 300h ; can't be any of the pre-defined COM values 219 220 PackedCOMPortAddresses: ; COM1 - COMC (or COM12) 221 db DEVICE_SERIAL_COM1 >> 2 222 db DEVICE_SERIAL_COM2 >> 2 223 db DEVICE_SERIAL_COM3 >> 2 224 db DEVICE_SERIAL_COM4 >> 2 225 db DEVICE_SERIAL_COM5 >> 2 226 db DEVICE_SERIAL_COM6 >> 2 227 db DEVICE_SERIAL_COM7 >> 2 228 db DEVICE_SERIAL_COM8 >> 2 229 db DEVICE_SERIAL_COM9 >> 2 230 db DEVICE_SERIAL_COMA >> 2 231 db DEVICE_SERIAL_COMB >> 2 232 db DEVICE_SERIAL_COMC >> 2 233 db DEVICE_SERIAL_DEFAULT_CUSTOM_PORT >> 2 ; must be last entry (see reader/writer routines) 234 DEVICE_SERIAL_DEFAULT_COM EQU '1' 235 236 g_rgbChoiceToValueLookupForBaud: 237 dw (115200 / 115200) & 0xff 238 dw (115200 / 57600) & 0xff 239 dw (115200 / 38400) & 0xff 240 dw (115200 / 28800) & 0xff 241 dw (115200 / 19200) & 0xff 242 dw (115200 / 9600) & 0xff 243 dw (115200 / 4800) & 0xff 244 dw (115200 / 2400) & 0xff 245 g_rgszChoiceToStringLookupForBaud: 246 dw g_szValueCfgBaud115_2 247 dw g_szValueCfgBaud57_6 248 dw g_szValueCfgBaud38_4 249 dw g_szValueCfgBaud28_8 250 dw g_szValueCfgBaud19_2 251 dw g_szValueCfgBaud9600 252 dw g_szValueCfgBaud4800 253 dw g_szValueCfgBaud2400 254 dw NULL 255 DEVICE_SERIAL_DEFAULT_BAUD EQU ((115200 / 9600) & 0xff) 216 256 217 257 ; Section containing code … … 240 280 lea ax, [bx+IDEVARS.wPort] 241 281 mov [cs:g_MenuitemIdeControllerCommandBlockAddress+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 282 283 lea ax, [bx+IDEVARS.bSerialPort] 242 284 mov [cs:g_MenuitemIdeControllerSerialPort+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 243 mov [cs:g_MenuitemIdeControllerSerialCOM+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 285 286 lea ax, [bx+IDEVARS.bSerialBaud] 244 287 mov [cs:g_MenuitemIdeControllerSerialBaud+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 245 ;; baud also modifies the next two bytes (print chars in wPortCtrl), but it never reads them246 288 247 289 lea ax, [bx+IDEVARS.wPortCtrl] 248 290 mov [cs:g_MenuitemIdeControllerControlBlockAddress+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 291 292 lea ax, [bx+IDEVARS.bSerialCOMPortChar] 293 mov [cs:g_MenuitemIdeControllerSerialCOM+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 249 294 250 295 lea ax, [bx+IDEVARS.bIRQ] … … 382 427 ALIGN JUMP_ALIGN 383 428 DisplayMasterSlaveMenu: 429 ; 430 ; block mode is not supported on serial drives, disable/enable the option as appropriate 431 ; 432 push bx 433 mov bx, [cs:g_MenuitemIdeControllerDevice+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset] 434 call Buffers_GetRomvarsValueToAXfromOffsetInBX 435 mov bx, g_MenuitemMasterSlaveBlockModeTransfers 436 cmp al,DEVICE_SERIAL_PORT 437 jz .isSerial 438 or BYTE [cs:bx+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE 439 jmp .isDone 440 .isSerial: 441 and BYTE [cs:bx+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE 442 .isDone: 443 pop bx 444 384 445 call MasterSlaveMenu_InitializeToDrvparamsOffsetInBX 385 446 jmp MasterSlaveMenu_EnterMenuOrModifyItemVisibility 386 387 PackedCOMPortAddresses: ; COM1 - COMC (or COM12)388 db (DEVICE_SERIAL_COM1 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1389 db (DEVICE_SERIAL_COM2 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1390 db (DEVICE_SERIAL_COM3 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1391 db (DEVICE_SERIAL_COM4 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1392 db (DEVICE_SERIAL_COM5 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1393 db (DEVICE_SERIAL_COM6 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1394 db (DEVICE_SERIAL_COM7 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1395 db (DEVICE_SERIAL_COM8 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1396 db (DEVICE_SERIAL_COM9 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1397 db (DEVICE_SERIAL_COMA - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1398 db (DEVICE_SERIAL_COMB - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1399 db (DEVICE_SERIAL_COMC - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1400 db 0 ; null terminated401 447 402 448 ;------------------------------------------------------------------------------------------ … … 474 520 jz .done ; if we were already serial, nothing to do 475 521 476 mov ax,DEVICE_SERIAL_DEFAULT_COM 522 mov byte [es:di+IDEVARS.bSerialBaud-IDEVARS.wPort],DEVICE_SERIAL_DEFAULT_BAUD 523 524 mov al,DEVICE_SERIAL_DEFAULT_COM 525 add di,IDEVARS.bSerialCOMPortChar-IDEVARS.wPort 477 526 call IdeControllerMenu_SerialWriteCOM 478 mov [es:di],ax 479 480 mov ax,DEVICE_SERIAL_DEFAULT_BAUD 481 call IdeControllerMenu_SerialWriteBaud 482 mov [es:di],ax 527 mov [es:di],al 483 528 484 add di,IDEVARS.bIRQ - IDEVARS.wPort ; clear out the interrupt information, we don't use interrupts485 mov al,0486 mov [es:di],al487 488 529 .done: 489 530 pop di … … 494 535 495 536 ; 496 ; "COMn" ASCII characer -> Numeric COM number 497 ; 498 ALIGN JUMP_ALIGN 499 IdeControllerMenu_SerialReadCOM: 500 xor ah,ah ; clear out packedportbaud value 501 502 cmp al,'x' ; base this on the ASCII character used to print 503 jz .custom 504 505 cmp al,'A' 506 jae .over10 507 508 sub al, '0'+1 ; convert ASCII value '0'-'9' to numeric 537 ; Doesn't modify COM character (unless it is not recognized, which would be an error case), 538 ; But does update the port address based on COM port selection 539 ; 540 ALIGN JUMP_ALIGN 541 IdeControllerMenu_SerialWriteCOM: 542 push ax 543 push bx 544 push si 545 546 mov si,g_rgbChoiceToValueLookupForCOM 547 mov bx,PackedCOMPortAddresses 548 549 .loop: 550 mov ah,[bx] 551 552 cmp ah,(DEVICE_SERIAL_DEFAULT_CUSTOM_PORT >> 2) 553 jz .notFound 554 555 cmp al,[si] 556 jz .found 557 558 inc si 559 inc si 560 inc bx 561 562 jmp .loop 563 564 .notFound: 565 mov al, 'x' 566 567 .found: 568 mov [es:di+IDEVARS.bSerialPort-IDEVARS.bSerialCOMPortChar], ah 569 570 pop si 571 pop bx 572 pop ax 573 509 574 ret 510 511 .over10: 512 sub al, 'A'-10+1 ; convert ASCII value 'A'-'C' to numeric 575 576 577 ; 578 ; Packed Port (byte) -> Numeric Port (word) 579 ; 580 ALIGN JUMP_ALIGN 581 IdeControllerMenu_SerialReadPort: 582 xor ah,ah 583 shl ax,1 584 shl ax,1 513 585 ret 514 586 515 .custom: 516 mov al, 12 ; convert ASCII value 'x' (for custom) to numeric 517 ret 518 519 ; 520 ; Numeric COM number -> Packed port address, and update ASCII character for printing "COMn" 521 ; 522 ALIGN JUMP_ALIGN 523 IdeControllerMenu_SerialWriteCOM: 524 push bx 525 526 cmp al,12 ; custom? 527 jge .custom 528 529 mov bx,ax ; lookup packed port address based on COM address 530 mov ah,[cs:bx+PackedCOMPortAddresses] 531 532 cmp al,9 ; COMA or higher, but not custom 533 jge .atorabove10 534 535 add al, '0'+1 ; convert numeric to ASCII '1' to '9' 536 jmp IdeControllerMenu_SerialWriteCOM_PackAndRet 537 538 .custom: 539 mov al,'x' ; ASCII value 'x' for custom 540 mov ah,1 << DEVICE_SERIAL_PACKEDPORTANDBAUD_PORT_FIELD_POSITION ; 248h 541 jmp IdeControllerMenu_SerialWriteCOM_PackAndRet 542 543 .atorabove10: 544 add al, 'A'-10+1 ; convert numeric to ASCII 'A' to 'C' 545 546 IdeControllerMenu_SerialWriteCOM_PackAndRet: 547 mov bl,[es:di+1] ; read baud rate bits 548 and bl,DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK 549 or ah,bl 550 551 pop bx 552 ret 553 554 ; 555 ; Packed Baud -> Numeric Baud 556 ; 557 ALIGN JUMP_ALIGN 558 IdeControllerMenu_SerialReadBaud: 559 xchg al,ah 560 and ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK ; also clears high order byte 561 ret 562 563 ; 564 ; Numeric Baud -> Packed Baud, also update ASCII printing characters for baud rate 565 ; 566 ALIGN JUMP_ALIGN 567 IdeControllerMenu_SerialWriteBaud: 568 and ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDBITS ; ensure we only have the bits we want 569 570 push bx 571 572 mov bx,ax ; lookup printing word for wPortCtrl 573 shl bx,1 574 mov bx,[cs:bx+g_wPrintBaud] 575 mov [es:di+2],bx 576 577 xchg al,ah ; or in port bits 578 mov bx,[es:di] 579 and bh,DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK 580 or ax,bx 581 582 pop bx 583 ret 584 585 ; 586 ; Packed Port -> Numeric Port 587 ; 588 ALIGN JUMP_ALIGN 589 IdeControllerMenu_SerialReadPort: 590 mov al,ah 591 and ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK ; note that this clears AH 592 shl ax,1 593 add ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT 594 ret 595 596 ; 597 ; Numeric Port -> Packed Port, convert from Custom to a defined COM port if we match one 587 ; 588 ; Numeric Port (word) -> Packed Port (byte) 589 ; And convert from Custom to a defined COM port if we match one of the pre-defined COM port numbers 598 590 ; 599 591 ALIGN JUMP_ALIGN 600 592 IdeControllerMenu_SerialWritePort: 601 593 push bx 602 603 sub ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT ; convert from numeric to packed port number 594 push si 595 604 596 shr ax,1 605 and al,DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK 606 607 mov bx,PackedCOMPortAddresses ; loop, looking for port address in known COM address list 608 .next: 609 mov ah,[cs:bx] 597 shr ax,1 598 and al,0feh ; force 8-byte boundary 599 600 mov si,g_rgbChoiceToValueLookupForCOM 601 mov bx,PackedCOMPortAddresses ; loop, looking for port address in known COM address list 602 603 .loop: 604 mov ah,[si] 605 cmp ah,'x' 606 jz .found 607 608 cmp al,[bx] 609 jz .found 610 611 inc si 612 inc si 610 613 inc bx 611 test ah,ah612 j z .notfound613 cmp al,ah 614 jnz .next 615 616 sub bx,PackedCOMPortAddresses + 1 ; FOUND!, +1 since we already incremented 617 mov ax,bx614 615 jmp .loop 616 617 .found: 618 mov [es:di+IDEVARS.bSerialCOMPortChar-IDEVARS.bSerialPort], ah 619 620 pop si 618 621 pop bx 619 jmp IdeControllerMenu_SerialWriteCOM ; if found, use that logic to get ASCII character 620 621 .notfound: 622 xchg ah,al 623 mov al,'x' 624 jmp IdeControllerMenu_SerialWriteCOM_PackAndRet 625 626 622 623 ret 624 625 626 627 628 629 630 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm
r203 r233 135 135 g_szNfoIdeSerialCOM: db "Select a COM port by number.",NULL 136 136 g_szNfoIdeSerialBaud: db "Select the COM port's Baud Rate. The server must match this speed. Note that UART clock multipliers may impact the actual speed.",NULL 137 g_szNfoIdeSerialPort: db "Select a COM port by custom I/O port address. A ddress must be in the range 248h to 430h andbe on an 8-byte boundary.", NULL137 g_szNfoIdeSerialPort: db "Select a COM port by custom I/O port address. Any address is valud up to 3f8h, but must be on an 8-byte boundary.", NULL 138 138 139 139 g_szHelpIdeCmdPort: incbin "IDE_CommandPort.txt" … … 161 161 162 162 g_szSerialCOMChoice: 163 db "COM1 - Port3f8h",LF164 db "COM2 - Port2f8h",LF165 db "COM3 - Port3e8h",LF166 db "COM4 - Port2e8h",LF167 db "COM5 - Port2f0h",LF168 db "COM6 - Port3e0h",LF169 db "COM7 - Port2e0h",LF170 db "COM8 - Port260h",LF171 db "COM9 - Port368h",LF172 db "COMA - Port268h",LF173 db "COMB - Port360h",LF174 db "COMC - Port270h",LF175 db "COMx - Custom Port",NULL163 db "COM1 - address 3f8h",LF 164 db "COM2 - address 2f8h",LF 165 db "COM3 - address 3e8h",LF 166 db "COM4 - address 2e8h",LF 167 db "COM5 - address 2f0h",LF 168 db "COM6 - address 3e0h",LF 169 db "COM7 - address 2e0h",LF 170 db "COM8 - address 260h",LF 171 db "COM9 - address 368h",LF 172 db "COMA - address 268h",LF 173 db "COMB - address 360h",LF 174 db "COMC - address 270h",LF 175 db "COMx - Custom address",NULL 176 176 177 177 g_szValueCfgCOM1: db "COM1",NULL … … 190 190 191 191 g_szSerialBaudChoice: 192 db "2400 baud",LF 192 db "115.2K baud",LF 193 db "57.6K baud",LF 194 db "38.4K baud",LF 195 db "28.8K baud",LF 196 db "19.2K baud",LF 193 197 db "9600 baud",LF 194 db "38.4K baud",LF 195 db "115.2K baud",NULL 196 198 db "4800 baud",LF 199 db "2400 baud",NULL 200 201 g_szValueCfgBaud115_2: db "115.2K",NULL 202 g_szValueCfgBaud57_6: db "57.6K",NULL 203 g_szValueCfgBaud38_4: db "38.4K",NULL 204 g_szValueCfgBaud28_8: db "28.8K",NULL 205 g_szValueCfgBaud19_2: db "19.2K",NULL 206 g_szValueCfgBaud9600: db "9600",NULL 207 g_szValueCfgBaud4800: db "4800",NULL 197 208 g_szValueCfgBaud2400: db "2400",NULL 198 g_szValueCfgBaud9600: db "9600",NULL 199 g_szValueCfgBaud38_4: db "38.4K",NULL 200 g_szValueCfgBaud115_2: db "115.2K",NULL 209 201 210 202 211 g_szValueCfgDeviceDual8b: db "XTIDE",NULL … … 363 372 364 373 g_szDashForZero: db "- ",NULL 374 375 g_szValueUnknownError: db "Error!",NULL 376 377 378
Note:
See TracChangeset
for help on using the changeset viewer.