- Timestamp:
- Feb 14, 2019, 7:38:08 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 1 deleted
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Assembly_Library/Inc/BiosFunctions.inc
r596 r601 5 5 6 6 ; BIOS interrupts 7 BIOS_VIDEO_INTERRUPT_10h EQU 10h 8 BIOS_EQUIPMENT_INTERRUPT_11h EQU 11h 9 BIOS_DISK_INTERRUPT_13h EQU 13h 10 BIOS_SYSTEM_INTERRUPT_15h EQU 15h 11 BIOS_KEYBOARD_INTERRUPT_16h EQU 16h 12 BIOS_BOOT_FAILURE_INTERRUPT_18h EQU 18h 13 BIOS_BOOT_LOADER_INTERRUPT_19h EQU 19h 14 BIOS_TIME_PCI_PNP_1Ah EQU 1Ah 15 BIOS_DISKETTE_INTERRUPT_40h EQU 40h 16 HD0_DPT_POINTER_41h EQU 41h 17 HD1_DPT_POINTER_46h EQU 46h 7 BIOS_VIDEO_INTERRUPT_10h EQU 10h 8 BIOS_EQUIPMENT_INTERRUPT_11h EQU 11h 9 BIOS_DISK_INTERRUPT_13h EQU 13h 10 BIOS_SYSTEM_INTERRUPT_15h EQU 15h 11 BIOS_KEYBOARD_INTERRUPT_16h EQU 16h 12 BIOS_BOOT_FAILURE_INTERRUPT_18h EQU 18h 13 BIOS_BOOT_LOADER_INTERRUPT_19h EQU 19h 14 BIOS_TIME_PCI_PNP_INTERRUPT_1Ah EQU 1Ah 15 BIOS_SYSTEM_TIMER_TICK_INTERRUPT_1Ch EQU 1Ch 16 BIOS_DISKETTE_INTERRUPT_40h EQU 40h 17 HD0_DPT_POINTER_41h EQU 41h 18 HD1_DPT_POINTER_46h EQU 46h 18 19 19 20 ; Hardware interrupts 20 HARDWARE_IRQ_0_INTERRUPT_08h EQU 08h ; System timer 21 HARDWARE_IRQ_1_INTERRUPT_09h EQU 09h ; Keyboard 22 HARDWARE_IRQ_2_INTERRUPT_0Ah EQU 0Ah 23 HARDWARE_IRQ_3_INTERRUPT_0Bh EQU 0Bh 24 HARDWARE_IRQ_4_INTERRUPT_0Ch EQU 0Ch 25 HARDWARE_IRQ_5_INTERRUPT_0Dh EQU 0Dh 26 HARDWARE_IRQ_6_INTERRUPT_0Eh EQU 0Eh 27 HARDWARE_IRQ_7_INTERRUPT_0Fh EQU 0Fh 28 HARDWARE_IRQ_8_INTERRUPT_70h EQU 70h 29 HARDWARE_IRQ_9_INTERRUPT_71h EQU 71h 30 HARDWARE_IRQ_10_INTERRUPT_72h EQU 72h 31 HARDWARE_IRQ_11_INTERRUPT_73h EQU 73h 32 HARDWARE_IRQ_12_INTERRUPT_74h EQU 74h 33 HARDWARE_IRQ_13_INTERRUPT_75h EQU 75h 34 HARDWARE_IRQ_14_INTERRUPT_76h EQU 76h 35 HARDWARE_IRQ_15_INTERRUPT_77h EQU 77h 36 21 HARDWARE_IRQ_0_INTERRUPT_08h EQU 08h ; System timer 22 HARDWARE_IRQ_1_INTERRUPT_09h EQU 09h ; Keyboard 23 HARDWARE_IRQ_2_INTERRUPT_0Ah EQU 0Ah 24 HARDWARE_IRQ_3_INTERRUPT_0Bh EQU 0Bh 25 HARDWARE_IRQ_4_INTERRUPT_0Ch EQU 0Ch 26 HARDWARE_IRQ_5_INTERRUPT_0Dh EQU 0Dh 27 HARDWARE_IRQ_6_INTERRUPT_0Eh EQU 0Eh 28 HARDWARE_IRQ_7_INTERRUPT_0Fh EQU 0Fh 29 HARDWARE_IRQ_8_INTERRUPT_70h EQU 70h 30 HARDWARE_IRQ_9_INTERRUPT_71h EQU 71h 31 HARDWARE_IRQ_10_INTERRUPT_72h EQU 72h 32 HARDWARE_IRQ_11_INTERRUPT_73h EQU 73h 33 HARDWARE_IRQ_12_INTERRUPT_74h EQU 74h 34 HARDWARE_IRQ_13_INTERRUPT_75h EQU 75h 35 HARDWARE_IRQ_14_INTERRUPT_76h EQU 76h 36 HARDWARE_IRQ_15_INTERRUPT_77h EQU 77h 37 37 38 38 ; BIOS video functions 39 SET_VIDEO_MODE EQU 00h40 SET_TEXT_MODE_CURSOR_SHAPE EQU 01h41 SET_CURSOR_POSITION EQU 02h42 GET_CURSOR_POSITION_AND_SIZE EQU 03h43 SELECT_ACTIVE_DISPLAY_PAGE EQU 05h44 TELETYPE_OUTPUT EQU 0Eh39 SET_VIDEO_MODE EQU 00h 40 SET_TEXT_MODE_CURSOR_SHAPE EQU 01h 41 SET_CURSOR_POSITION EQU 02h 42 GET_CURSOR_POSITION_AND_SIZE EQU 03h 43 SELECT_ACTIVE_DISPLAY_PAGE EQU 05h 44 TELETYPE_OUTPUT EQU 0Eh 45 45 46 46 ; BIOS disk functions 47 READ_SECTORS_INTO_MEMORY EQU 02h48 GET_DRIVE_PARAMETERS EQU 08h49 RESET_HARD_DISK EQU 0Dh50 GET_DISK_TYPE EQU 15h51 LOTECH_XTCF_FEATURES EQU 1Eh52 GET_DRIVE_INFORMATION EQU 25h53 CHECK_EXTENSIONS_PRESENT EQU 41h54 GET_EXTENDED_DRIVE_INFORMATION EQU 48h47 READ_SECTORS_INTO_MEMORY EQU 02h 48 GET_DRIVE_PARAMETERS EQU 08h 49 RESET_HARD_DISK EQU 0Dh 50 GET_DISK_TYPE EQU 15h 51 LOTECH_XTCF_FEATURES EQU 1Eh 52 GET_DRIVE_INFORMATION EQU 25h 53 CHECK_EXTENSIONS_PRESENT EQU 41h 54 GET_EXTENDED_DRIVE_INFORMATION EQU 48h 55 55 56 56 ; BIOS system functions 57 OS_HOOK_DEVICE_BUSY EQU 90h58 OS_HOOK_DEVICE_POST EQU 91h57 OS_HOOK_DEVICE_BUSY EQU 90h 58 OS_HOOK_DEVICE_POST EQU 91h 59 59 60 60 ; BIOS keyboard functions 61 GET_KEYSTROKE EQU 00h62 CHECK_FOR_KEYSTROKE EQU 01h61 GET_KEYSTROKE EQU 00h 62 CHECK_FOR_KEYSTROKE EQU 01h 63 63 64 64 ; BIOS system functions 65 EVENT_WAIT EQU 86h65 EVENT_WAIT EQU 86h 66 66 67 ; BIOS PCI 2.0+ functions 68 PCI_INSTALLATION_CHECK EQU 0B101h 69 67 ; BIOS PCI 2.0c+ functions 68 PCI_INSTALLATION_CHECK EQU 0B101h 70 69 71 70 %endif ; BIOS_FUNCTIONS_INC -
trunk/Assembly_Library/Inc/DosFunctions.inc
r592 r601 36 36 ; DOS errors 37 37 ERR_DOS_FUNCTION_NUMBER_INVALID EQU 01h 38 ERR_DOS_PATH_NOT_FOUND EQU 03h 38 39 ERR_DOS_INVALID_DRIVE EQU 0Fh 40 ERR_DOS_NO_MORE_FILES EQU 12h 39 41 ERR_DOS_DRIVE_NOT_READY EQU 15h 40 42 -
trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm
r596 r601 746 746 mov ax, FIND_FIRST_MATCHING_FILE<<8 747 747 int DOS_INTERRUPT_21h 748 ; Returns ERR_DOS_NO_MORE_FILES only when the root directory is the current directory (at least under Windows XP). 749 cmp al, ERR_DOS_PATH_NOT_FOUND 748 750 pop ax 749 751 pop ds … … 752 754 753 755 xchg ah, [cs:bLastCriticalError] ; Zero bLastCriticalError and fetch error code to AH 756 je SHORT .DriveIsNotReady ; A removable drive with no media (or possibly a drive that has not been formatted?) 754 757 cmp ah, ERR_DOS_DRIVE_NOT_READY 755 758 jne SHORT .DriveIsReady 756 759 .DriveIsNotReady: 757 760 mov bx, g_szDlgDriveNotReady 758 761 call Dialogs_DisplayYesNoResponseDialogWithTitleStringInBX -
trunk/Assembly_Library/Src/Menu/MenuAttributes.asm
r592 r601 68 68 cmp al, 7 69 69 je SHORT .LoadMonoAttribute 70 testal, 1 ; Even modes (0 and 2) are B/W71 j nzSHORT .LoadColorAttribute70 shr al, 1 ; Even modes (0 and 2) are B/W 71 jc SHORT .LoadColorAttribute 72 72 73 73 .LoadBlackAndWhiteAttribute: -
trunk/Assembly_Library/Src/Serial/SerialServer.asm
r592 r601 38 38 ;-------------------------------------------------------------------- 39 39 SerialServer_SendReceive: 40 41 push si 42 push di 43 push bp 40 push si 41 push di 42 push bp 44 43 45 44 ; … … 48 47 ; Baud in CH until UART initialization is complete 49 48 ; 50 mov ch,dh51 xor dh,dh52 eSHL_IM dx, 2; shift from one byte to two53 54 mov al,[bp+SerialServer_Command.bSectorCount]55 mov ah,[bp+SerialServer_Command.bCommand]49 mov ch, dh 50 xor dh, dh 51 eSHL_IM dx, 2 ; shift from one byte to two 52 53 mov al, [bp+SerialServer_Command.bSectorCount] 54 mov ah, [bp+SerialServer_Command.bCommand] 56 55 57 56 ; 58 57 ; Command byte and sector count live at the top of the stack, pop/push are used to access 59 58 ; 60 push ax; save sector count for return value61 push ax; working copy on the top of the stack62 63 %ifndef EXCLUDE_FROM_XUB ; DF already cleared in Int13h.asm59 push ax ; save sector count for return value 60 push ax ; working copy on the top of the stack 61 62 %ifndef EXCLUDE_FROM_XUB ; DF already cleared in Int13h.asm 64 63 %ifdef CLD_NEEDED 65 64 cld 66 65 %endif 67 66 %endif … … 74 73 ; decided to reprogram the UART 75 74 ; 76 mov bl,dl ; setup BL with proper values for read/write loops (BH comes later) 77 78 mov al,83h 79 add dl, Serial_UART_lineControl ; Clears CF 80 out dx,al 81 82 mov al,ch 83 mov dl,bl ; divisor low 84 out dx,al 75 mov bl, dl ; setup BL with proper values for read/write loops (BH comes later) 76 mov al, 83h 77 add dl, Serial_UART_lineControl ; Clears CF 78 out dx, al 79 80 mov al, ch 81 mov dl, bl ; divisor low 82 out dx, al 85 83 86 84 %ifdef USE_UNDOC_INTEL 87 salc; Clear AL using CF85 salc ; Clear AL using CF 88 86 %else 89 90 %endif 91 inc dx; divisor high92 93 out dx,al94 95 mov al,047h96 inc dx; fifo97 out dx,al98 99 mov al,03h100 inc dx; linecontrol101 out dx,al102 103 mov al,0bh104 inc dx; modemcontrol105 out dx,al106 107 inc dx; linestatus (no output now, just setting up BH for later use)108 mov bh,dl109 110 pop dx; base, interrupts disabled87 xor al, al 88 %endif 89 inc dx ; divisor high 90 push dx 91 out dx, al 92 93 mov al, 47h 94 inc dx ; fifo 95 out dx, al 96 97 mov al, 03h 98 inc dx ; linecontrol 99 out dx, al 100 101 mov al, 0Bh 102 inc dx ; modemcontrol 103 out dx, al 104 105 inc dx ; linestatus (no output now, just setting up BH for later use) 106 mov bh, dl 107 108 pop dx ; base, interrupts disabled 111 109 %ifdef USE_UNDOC_INTEL 112 salc; Clear AL using CF110 salc ; Clear AL using CF 113 111 %else 114 115 %endif 116 out dx,al112 xor al, al 113 %endif 114 out dx, al 117 115 118 116 ;---------------------------------------------------------------------- … … 122 120 ; Sends first six bytes of IDEREGS_AND_INTPACK as the command 123 121 ; 124 push es; save off real buffer location125 126 127 mov si,bp; point to IDEREGS for command dispatch;128 129 130 131 mov di,0ffffh; initialize checksum for write132 mov bp,di133 134 mov cx,4; writing 3 words (plus 1)135 136 cli; interrupts off...137 138 139 140 pop di; restore real buffer location (note change from SI to DI)141 ; Buffer is primarily referenced through ES:DI throughout, since142 ; we need to store (read sector) faster than we read (write sector)143 144 145 pop ax; load command byte (done before call to .nextSector on subsequent iterations)146 122 push es ; save off real buffer location 123 push si 124 125 mov si, bp ; point to IDEREGS for command dispatch; 126 push ss 127 pop es 128 129 mov di, 0FFFFh ; initialize checksum for write 130 mov bp, di 131 132 mov cx, 4 ; writing 3 words (plus 1) 133 134 cli ; interrupts off... 135 136 call SerialServer_WriteProtocol.entry 137 138 pop di ; restore real buffer location (note change from SI to DI) 139 ; Buffer is primarily referenced through ES:DI throughout, since 140 ; we need to store (read sector) faster than we read (write sector) 141 pop es 142 143 pop ax ; load command byte (done before call to .nextSector on subsequent iterations) 144 push ax 147 145 148 146 %ifndef SERIALSERVER_NO_ZERO_SECTOR_COUNTS 149 test al,al; if no sectors to be transferred, wait for the ACK checksum on the command150 jz.zeroSectors147 test al, al ; if no sectors to be transferred, wait for the ACK checksum on the command 148 jz SHORT .zeroSectors 151 149 %endif 152 150 … … 155 153 ; 156 154 .nextSector: 157 mov si,0ffffh; initialize checksum for read or write158 mov bp,si159 160 mov cx,0101h; writing 256 words (plus 1)161 162 sahf; command byte, are we doing a write?163 jnc.readEntry164 165 xchg si,di; swap pointer and checksum, will be re-swap'ed in WriteProtocol166 155 mov si, 0FFFFh ; initialize checksum for read or write 156 mov bp, si 157 158 mov cx, 0101h ; writing 256 words (plus 1) 159 160 sahf ; command byte, are we doing a write? 161 jnc SHORT .readEntry 162 163 xchg si, di ; swap pointer and checksum, will be re-swap'ed in WriteProtocol 164 call SerialServer_WriteProtocol.entry 167 165 168 166 .zeroSectors: 169 inc cx; CX = 1 now (0 out of WriteProtocol)170 jmp.readEntry167 inc cx ; CX = 1 now (0 out of WriteProtocol) 168 jmp SHORT .readEntry 171 169 172 170 ;---------------------------------------------------------------------- … … 177 175 ; 178 176 .readTimeout: 179 push ax; not only does this push preserve AX (which we need), but it also180 ; means the stack has the same number of bytes on it as when we are181 ; sending a packet, important for error cleanup and exit182 mov ah,1183 184 185 test dl,1186 jz.readByte1Ready187 jmp.readByte2Ready177 push ax ; not only does this push preserve AX (which we need), but it also 178 ; means the stack has the same number of bytes on it as when we are 179 ; sending a packet, important for error cleanup and exit 180 mov ah, 1 181 call SerialServer_WaitAndPoll_Read 182 pop ax 183 test dl, 1 184 jz SHORT .readByte1Ready 185 jmp SHORT .readByte2Ready 188 186 189 187 ;---------------------------------------------------------------------------- … … 197 195 ; 198 196 .readLoop: 199 stosw; store word in caller's data buffer200 201 add bp, ax; update Fletcher's checksum202 203 204 197 stosw ; store word in caller's data buffer 198 199 add bp, ax ; update Fletcher's checksum 200 adc bp, 0 201 add si, bp 202 adc si, 0 205 203 206 204 .readEntry: 207 mov dl,bh208 in al,dx209 shr al,1; data ready (byte 1)?210 mov dl,bl; get ready to read data211 jnc .readTimeout; nope not ready, update timeouts205 mov dl, bh 206 in al, dx 207 shr al, 1 ; data ready (byte 1)? 208 mov dl, bl ; get ready to read data 209 jnc SHORT .readTimeout ; nope not ready, update timeouts 212 210 213 211 ; … … 216 214 ; 217 215 .readByte1Ready: 218 in al, dx ; read data byte 1 219 220 mov ah, al ; store byte in ah for now 216 in al, dx ; read data byte 1 217 mov ah, al ; store byte in ah for now 221 218 222 219 ; … … 227 224 ; .read_byte2_ready) 228 225 ; 229 mov dl,bh230 231 in al,dx232 shr al,1; data ready (byte 2)?233 jnc.readTimeout226 mov dl, bh 227 228 in al, dx 229 shr al, 1 ; data ready (byte 2)? 230 jnc SHORT .readTimeout 234 231 .readByte2Ready: 235 mov dl,bl 236 in al, dx ; read data byte 2 237 238 xchg al, ah ; ah was holding byte 1, reverse byte order 239 240 loop .readLoop 241 242 sti ; interrupts back on ASAP, between packets 232 mov dl, bl 233 in al, dx ; read data byte 2 234 xchg al, ah ; ah was holding byte 1, reverse byte order 235 loop .readLoop 236 sti ; interrupts back on ASAP, between packets 243 237 244 238 ; 245 239 ; Compare checksums 246 240 ; 247 xchg ax,bp 248 xor ah,al 249 mov cx,si 250 xor cl,ch 251 mov al,cl 252 cmp ax,bp 253 jnz SerialServer_OutputWithParameters_Error 254 255 pop ax ; sector count and command byte 256 dec al ; decrement sector count 257 push ax ; save 258 jz SerialServer_OutputWithParameters_ReturnCodeInAL 259 260 cli ; interrupts back off for ACK byte to host 261 ; (host could start sending data immediately) 262 out dx,al ; ACK with next sector number 263 264 jmp short .nextSector 241 xchg ax, bp 242 xor ah, al 243 mov cx, si 244 xor cl, ch 245 mov al, cl 246 cmp ax, bp 247 jne SHORT SerialServer_OutputWithParameters_Error 248 249 pop ax ; sector count and command byte 250 dec al ; decrement sector count 251 push ax ; save 252 jz SHORT SerialServer_OutputWithParameters_ReturnCodeInAL 253 254 cli ; interrupts back off for ACK byte to host 255 ; (host could start sending data immediately) 256 out dx, al ; ACK with next sector number 257 jmp SHORT .nextSector 265 258 266 259 ;--------------------------------------------------------------------------- … … 274 267 ALIGN JUMP_ALIGN 275 268 SerialServer_OutputWithParameters_ErrorAndPop4Words: 276 add sp,8269 add sp, 8 277 270 ;;; fall-through 278 271 … … 287 280 ; taken care of this, but I have seen cases where this is not true. 288 281 ; 289 xor cx,cx; timeout this clearing routine, in case the UART isn't there282 xor cx, cx ; timeout this clearing routine, in case the UART isn't there 290 283 .clearBuffer: 291 mov dl,bh292 in al,dx293 mov dl,bl294 test al,08fh295 jz.clearBufferComplete296 test al,1297 in al,dx298 loopnz .clearBuffer; note ZF from test above284 mov dl, bh 285 in al, dx 286 mov dl, bl 287 test al, 8Fh 288 jz SHORT .clearBufferComplete 289 test al, 1 290 in al, dx 291 loopnz .clearBuffer ; note ZF from test above 299 292 300 293 .clearBufferComplete: 301 mov al, 1; error return code294 mov al, 1 ; error return code 302 295 303 296 ALIGN JUMP_ALIGN 304 297 SerialServer_OutputWithParameters_ReturnCodeInAL: 305 298 %if 0 306 sti; all paths here will already have interrupts turned back on307 %endif 308 mov ah, al; for success, AL will already be zero309 310 pop bx; recover "ax" (command and count) from stack311 pop cx; recover saved sector count312 313 sub cl, bl; subtract off the number of sectors that remained314 315 316 317 318 319 sahf; error return code to CF320 321 ret 299 sti ; all paths here will already have interrupts turned back on 300 %endif 301 mov ah, al ; for success, AL will already be zero 302 303 pop bx ; recover "ax" (command and count) from stack 304 pop cx ; recover saved sector count 305 xor ch, ch 306 sub cl, bl ; subtract off the number of sectors that remained 307 308 pop bp 309 pop di 310 pop si 311 312 sahf ; error return code to CF 313 ret 314 322 315 323 316 ;-------------------------------------------------------------------- … … 345 338 SerialServer_WriteProtocol: 346 339 .writeLoop: 347 es lodsw; fetch next word348 349 out dx,al; output first byte350 351 add bp,ax; update checksum352 adc bp,0353 add di,bp354 adc di,0355 356 mov dl,bh; transmit buffer empty?357 in al,dx358 test al,20h359 jz .writeTimeout2; nope, use our polling routine340 es lodsw ; fetch next word 341 342 out dx, al ; output first byte 343 344 add bp, ax ; update checksum 345 adc bp, 0 346 add di, bp 347 adc di, 0 348 349 mov dl, bh ; transmit buffer empty? 350 in al, dx 351 test al, 20h 352 jz SHORT .writeTimeout2 ; nope, use our polling routine 360 353 361 354 .writeByte2Ready: 362 mov dl,bl363 mov al,ah; output second byte364 out dx,al355 mov dl, bl 356 mov al, ah ; output second byte 357 out dx, al 365 358 366 359 .entry: 367 mov dl,bh; transmit buffer empty?368 in al,dx369 test al,20h370 mov dl,bl371 jz .writeTimeout1; nope, use our polling routine360 mov dl, bh ; transmit buffer empty? 361 in al, dx 362 test al, 20h 363 mov dl, bl 364 jz SHORT .writeTimeout1 ; nope, use our polling routine 372 365 373 366 .writeByte1Ready: 374 loop .writeLoop 375 376 mov ax,di ; fold Fletcher's checksum and output 377 xor al,ah 378 out dx,al ; byte 1 379 380 call SerialServer_WaitAndPoll_Write 381 382 mov ax,bp 383 xor al,ah 384 out dx,al ; byte 2 385 386 xchg si,di ; preserve checksum word in si, move pointer back to di 387 388 ret 367 loop .writeLoop 368 369 mov ax, di ; fold Fletcher's checksum and output 370 xor al, ah 371 out dx, al ; byte 1 372 373 call SerialServer_WaitAndPoll_Write 374 375 mov ax, bp 376 xor al, ah 377 out dx, al ; byte 2 378 379 xchg si, di ; preserve checksum word in si, move pointer back to di 380 ret 389 381 390 382 .writeTimeout2: 391 mov dl,ah; need to preserve AH, but don't need DL (will be reset upon return)392 393 mov ah,dl394 jmp.writeByte2Ready383 mov dl, ah ; need to preserve AH, but don't need DL (will be reset upon return) 384 call SerialServer_WaitAndPoll_Write 385 mov ah, dl 386 jmp SHORT .writeByte2Ready 395 387 396 388 .writeTimeout1: 397 ePUSH_T ax, .writeByte1Ready; return address for ret at end of SC_writeTimeout2389 ePUSH_T ax, .writeByte1Ready ; return address for ret at end of SC_writeTimeout2 398 390 ;;; fall-through 399 391 … … 418 410 ALIGN JUMP_ALIGN 419 411 SerialServer_WaitAndPoll_Write: 420 mov ah,20h412 mov ah, 20h 421 413 ;;; fall-through 422 414 423 415 ALIGN JUMP_ALIGN 424 416 SerialServer_WaitAndPoll_Read: 425 426 417 push cx 418 push dx 427 419 428 420 ; 429 421 ; We first poll in a tight loop, interrupts off, for the next character to come in/be sent 430 422 ; 431 xor cx,cx423 xor cx, cx 432 424 .readTimeoutLoop: 433 mov dl,bh434 in al,dx435 test al,ah436 jnz.readTimeoutComplete437 425 mov dl, bh 426 in al, dx 427 test al, ah 428 jnz SHORT .readTimeoutComplete 429 loop .readTimeoutLoop 438 430 439 431 ; … … 441 433 ; and wait for a given number of timer ticks to pass. 442 434 ; 443 435 sti 444 436 %ifndef SERIALSERVER_TIMER_LOCATION 445 mov cl,SerialServer_WaitAndPoll_SoftDelayTicks446 437 mov cl, SerialServer_WaitAndPoll_SoftDelayTicks 438 call Timer_InitializeTimeoutWithTicksInCL 447 439 %else 448 449 450 mov ax,SerialServer_WaitAndPoll_SoftDelayTicks451 mov bx,SERIALSERVER_TIMER_LOCATION452 453 454 440 push ax 441 push bx 442 mov ax, SerialServer_WaitAndPoll_SoftDelayTicks 443 mov bx, SERIALSERVER_TIMER_LOCATION 444 call TimerTicks_InitializeTimeoutFromAX 445 pop bx 446 pop ax 455 447 %endif 456 448 457 449 .WaitAndPoll: 458 450 %ifndef SERIALSERVER_TIMER_LOCATION 459 451 call Timer_SetCFifTimeout 460 452 %else 461 462 463 mov bx,SERIALSERVER_TIMER_LOCATION464 465 466 467 %endif 468 469 in al,dx470 test al,ah471 jz.WaitAndPoll472 453 push ax 454 push bx 455 mov bx, SERIALSERVER_TIMER_LOCATION 456 call TimerTicks_GetTimeoutTicksLeftToAXfromDSBX 457 pop bx 458 pop ax 459 %endif 460 jc SerialServer_OutputWithParameters_ErrorAndPop4Words 461 in al, dx 462 test al, ah 463 jz SHORT .WaitAndPoll 464 cli 473 465 474 466 .readTimeoutComplete: 475 pop dx 476 pop cx 477 ret 478 479 467 pop dx 468 pop cx 469 ret 470 -
trunk/Assembly_Library/Src/Serial/SerialServerScan.asm
r589 r601 1 1 ; Project name : Assembly Library 2 2 ; Description : Serial Server Support, Scan for Server 3 3 4 ; 4 5 ; This functionality is broken out from SerialServer as it may only be needed during … … 43 44 ;-------------------------------------------------------------------- 44 45 SerialServerScan_ScanForServer: 45 46 mov cx, 1 ; one sector, not scanning (default) 46 47 47 48 48 test dx, dx 49 jnz SHORT SerialServerScan_CheckForServer_PortAndBaudInDX 49 50 50 51 51 mov di, .scanPortAddresses-1 52 mov ch, 1 ; tell server that we are scanning 52 53 53 54 .nextPort: 54 55 56 57 58 55 inc di ; load next port address 56 mov dh, 40h ; Clear DH and make sure CF is set if error 57 mov dl, [cs:di] 58 eSHL_IM dx, 2 ; shift from one byte to two 59 jz SHORT .error 59 60 60 61 ; 61 62 ; Test for COM port presence, write to and read from registers 62 63 ; 63 64 65 66 67 68 69 70 64 push dx 65 add dl, Serial_UART_lineControl 66 mov al, 9Ah 67 out dx, al 68 in al, dx 69 pop dx 70 cmp al, 9Ah 71 jne SHORT .nextPort 71 72 72 73 74 75 76 73 mov al, 0Ch 74 out dx, al 75 in al, dx 76 cmp al, 0Ch 77 jne SHORT .nextPort 77 78 78 79 ; … … 88 89 ; Note: hardware baud multipliers (2x, 4x, 8x) will impact the final baud rate and are not known at this level 89 90 ; 90 91 91 mov dh, 30h * 2 ; multiply by 2 since we are about to divide by 2 92 mov dl, [cs:di] ; restore single byte port address for scan 92 93 93 94 .nextBaud: 94 95 96 97 98 95 shr dh, 1 96 jz SHORT .nextPort 97 cmp dh, 6 ; skip from 6 to 4, to move from the top of the 9600 baud range 98 jne SHORT .testBaud ; to the bottom of the 115200 baud range 99 mov dh, 4 99 100 100 101 .testBaud: 101 102 102 call SerialServerScan_CheckForServer_PortAndBaudInDX 103 jc SHORT .nextBaud 103 104 104 105 .error: 105 106 ret 106 107 107 .scanPortAddresses: db SERIAL_COM7_IOADDRESS >> 2 108 db SERIAL_COM6_IOADDRESS >> 2 109 db SERIAL_COM5_IOADDRESS >> 2 110 db SERIAL_COM4_IOADDRESS >> 2 111 db SERIAL_COM3_IOADDRESS >> 2 112 db SERIAL_COM2_IOADDRESS >> 2 113 db SERIAL_COM1_IOADDRESS >> 2 114 db 0 108 .scanPortAddresses: 109 db SERIAL_COM7_IOADDRESS >> 2 110 db SERIAL_COM6_IOADDRESS >> 2 111 db SERIAL_COM5_IOADDRESS >> 2 112 db SERIAL_COM4_IOADDRESS >> 2 113 db SERIAL_COM3_IOADDRESS >> 2 114 db SERIAL_COM2_IOADDRESS >> 2 115 db SERIAL_COM1_IOADDRESS >> 2 116 db 0 115 117 116 118 … … 133 135 ;-------------------------------------------------------------------- 134 136 SerialServerScan_CheckForServer_PortAndBaudInDX: 135 136 137 138 139 140 137 push bp ; setup fake SerialServer_Command 138 push dx ; send port baud and rate, returned in inquire packet 139 ; (and possibly returned in the drive identification string) 140 push cx ; send number of sectors, and if it is on a scan or not 141 mov bl, SerialServer_Command_Inquire ; protocol command onto stack with bh 142 push bx 141 143 142 143 144 mov bp, sp 145 call SerialServer_SendReceive 144 146 145 146 147 148 147 pop bx 148 pop cx 149 pop dx 150 pop bp 149 151 150 152 ret 151 153 -
trunk/Assembly_Library/Src/Util/CMOS.asm
r593 r601 131 131 GetSumOfBytes10hto2DhtoCX: 132 132 xor cx, cx ; Sum 133 mov dx, 10h ; First index 133 mov dl, 10h ; First index 134 xor ah, ah 134 135 135 136 .AddNextByte: 136 137 call CMOS_ReadFromIndexInDLtoAL 137 xor ah, ah138 138 add cx, ax 139 139 inc dx 140 140 cmp dl, 2Dh ; Last index 141 jbe .AddNextByte141 jbe SHORT .AddNextByte 142 142 ret -
trunk/XTIDE_Universal_BIOS/Inc/BootVars.inc
r600 r601 40 40 41 41 struc HOTKEYVARS 42 .fpPrevTimerHandler resb 4 ; Previous 1Ch timer hand er42 .fpPrevTimerHandler resb 4 ; Previous 1Ch timer handler 43 43 .wTimeWhenDisplayed resb 2 ; System time (ticks) when Hotkey bar was first displayed 44 44 .wFddAndHddLetters: … … 79 79 80 80 ; MAX_HARD_DISK_NAME_LENGTH must be defined ahead of the DRVDETECTINFO structure to avoid problems with NASM 81 MAX_HARD_DISK_NAME_LENGTH EQU 30 81 MAX_HARD_DISK_NAME_LENGTH EQU 30 ; Bytes reserved for drive name 82 82 83 83 struc DRVDETECTINFO -
trunk/XTIDE_Universal_BIOS/Inc/HotkeyBar.inc
r599 r601 23 23 MIN_TIME_TO_DISPLAY_HOTKEY_BAR EQU (4000/55) ; 4000 ms 24 24 25 ESC_SCANCODE EQU 1 ; ESC key 25 ESC_SCANCODE EQU 1 ; ESC key 26 26 FIRST_FUNCTION_KEY_SCANCODE EQU 3Bh ; F1 key 27 27 -
trunk/XTIDE_Universal_BIOS/Inc/IDE_8bit.inc
r589 r601 31 31 ; ES:DI: Ptr to destination buffer 32 32 ; Returns: 33 ; ES:DI: Incremented/decremented for next word33 ; DI: Incremented/Decremented for next word 34 34 ; Corrupts registers: 35 35 ; AL, FLAGS … … 61 61 ; DS:SI: Ptr to source buffer 62 62 ; Returns: 63 ; SI: Incremented/ decremented for next word63 ; SI: Incremented/Decremented for next word 64 64 ; Corrupts registers: 65 65 ; AX, FLAGS … … 92 92 ; DS:SI: Ptr to source buffer 93 93 ; Returns: 94 ; SI: Incremented/ decremented for next word94 ; SI: Incremented/Decremented for next word 95 95 ; Corrupts registers: 96 96 ; AX, FLAGS … … 115 115 116 116 117 ;-------------------------------------------------------------------- 118 ; Emulates INSW for modified XTIDE for use on Olivetti M24 and derivatives. 119 ; 120 ; XTIDE_MOD_OLIVETTI_INSW 121 ; Parameters: 122 ; DX: XTIDE Data Low Register address 123 ; ES:DI: Ptr to destination buffer 124 ; Returns: 125 ; DI: Incremented/Decremented for next word 126 ; Corrupts registers: 127 ; AL, FLAGS 128 ;-------------------------------------------------------------------- 129 %macro XTIDE_MOD_OLIVETTI_INSW 0 130 %ifdef USE_186 ; INS instruction available 131 insb ; Load low byte from port DX to [ES:DI] 132 inc dx ; IDE Data Reg to XTIDE Data High Reg 133 insb ; Load high byte from port DX to [ES:DI] 134 dec dx ; Restore to IDE Data Register 135 %else ; If 8088/8086 136 in al, dx ; Load low byte from port 137 inc dx ; IDE Data Reg to XTIDE Data High Reg 138 stosb ; Store byte to [ES:DI] 139 in al, dx ; Load high byte from port 140 dec dx ; Restore to IDE Data Register 141 stosb ; Store byte to [ES:DI] 142 %endif 143 %endmacro 144 145 117 146 %endif ; IDE_8BIT_INC -
trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc
r593 r601 111 111 ; IDE Devices are grouped so device numbers cannot be changed without modifying code elsewhere! 112 112 COUNT_OF_STANDARD_IDE_DEVICES EQU 2 ; 16- and 32-bit controllers 113 COUNT_OF_8BIT_IDE_DEVICES EQU 9113 COUNT_OF_8BIT_IDE_DEVICES EQU 10 114 114 COUNT_OF_ALL_IDE_DEVICES EQU (COUNT_OF_8BIT_IDE_DEVICES + COUNT_OF_STANDARD_IDE_DEVICES) 115 115 ; Standard port mapped I/O … … 119 119 DEVICE_8BIT_XTIDE_REV1 EQU ((COUNT_OF_STANDARD_IDE_DEVICES+1)<<1) 120 120 ; Address lines A0 and A3 are swapped 121 DEVICE_8BIT_XTIDE_REV2 EQU ((COUNT_OF_STANDARD_IDE_DEVICES+2)<<1) ; Or rev 1 with swapped A0 and A3 121 DEVICE_8BIT_XTIDE_REV2 EQU ((COUNT_OF_STANDARD_IDE_DEVICES+2)<<1) ; Or rev 1 with swapped A0 and A3... 122 DEVICE_8BIT_XTIDE_REV2_OLIVETTI EQU ((COUNT_OF_STANDARD_IDE_DEVICES+3)<<1) ; ...in Olivetti M24 and derivatives 122 123 ; IDE Register offsets are SHL 1 123 DEVICE_8BIT_XTCF_PIO8 EQU ((COUNT_OF_STANDARD_IDE_DEVICES+ 3)<<1) ; XT-CF using 8-bit PIO mode124 DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD EQU ((COUNT_OF_STANDARD_IDE_DEVICES+ 4)<<1) ; XT-CF using 8-bit PIO mode, but with 16-bit instructions125 DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD EQU ((COUNT_OF_STANDARD_IDE_DEVICES+ 5)<<1) ; Lo-tech 8-bit IDE Adapter126 DEVICE_8BIT_XTCF_DMA EQU ((COUNT_OF_STANDARD_IDE_DEVICES+ 6)<<1) ; XT-CFv3 using DMA124 DEVICE_8BIT_XTCF_PIO8 EQU ((COUNT_OF_STANDARD_IDE_DEVICES+4)<<1) ; XT-CF using 8-bit PIO mode 125 DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD EQU ((COUNT_OF_STANDARD_IDE_DEVICES+5)<<1) ; XT-CF using 8-bit PIO mode, but with 16-bit instructions 126 DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD EQU ((COUNT_OF_STANDARD_IDE_DEVICES+6)<<1) ; Lo-tech 8-bit IDE Adapter 127 DEVICE_8BIT_XTCF_DMA EQU ((COUNT_OF_STANDARD_IDE_DEVICES+7)<<1) ; XT-CFv3 using DMA 127 128 ; Memory Mapped I/O 128 DEVICE_8BIT_JRIDE_ISA EQU ((COUNT_OF_STANDARD_IDE_DEVICES+ 7)<<1) ; JR-IDE/ISA (Memory Mapped I/O)129 DEVICE_8BIT_ADP50L EQU ((COUNT_OF_STANDARD_IDE_DEVICES+ 8)<<1) ; SVC ADP50L (Memory Mapped I/O)129 DEVICE_8BIT_JRIDE_ISA EQU ((COUNT_OF_STANDARD_IDE_DEVICES+8)<<1) ; JR-IDE/ISA (Memory Mapped I/O) 130 DEVICE_8BIT_ADP50L EQU ((COUNT_OF_STANDARD_IDE_DEVICES+9)<<1) ; SVC ADP50L (Memory Mapped I/O) 130 131 ; Virtual devices 131 132 DEVICE_SERIAL_PORT EQU (COUNT_OF_ALL_IDE_DEVICES<<1) -
trunk/XTIDE_Universal_BIOS/Inc/Version.inc
r592 r601 20 20 21 21 ; Flash signature revisions: 22 ; XTIDE207 Added device type DEVICE_8BIT_XTIDE_REV2_OLIVETTI 22 23 ; XTIDE206 Added support for Color Themes 23 24 ; XTIDE205 Added DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD after other XT-CF … … 49 50 %define TITLE_STRING TITLE_STRING_START, TITLE_STRING_END 50 51 %define ROM_VERSION_STRING "v2.0.0",BETA,"3+ (",__DATE__,")",NULL 51 %define FLASH_SIGNATURE "XTIDE20 6" ; Do not terminate with NULL52 %define FLASH_SIGNATURE "XTIDE207" ; Do not terminate with NULL 52 53 53 54 -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm
r558 r601 59 59 60 60 %ifdef MODULE_8BIT_IDE_ADVANCED 61 je SHORT .ReverseA0andA3fromRegisterIndexInDX 61 cmp al, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 62 jbe SHORT .ReverseA0andA3fromRegisterIndexInDX 62 63 63 64 eSHL_IM dx, 1 ; ADP50L and XT-CF … … 99 100 IdeIO_OutputALtoIdeControlBlockRegisterInDL: 100 101 xor dh, dh ; IDE Register index now in DX 101 102 102 mov bl, [di+DPT_ATA.bDevice] 103 103 cmp bl, DEVICE_8BIT_XTIDE_REV2 … … 105 105 106 106 %ifdef MODULE_8BIT_IDE_ADVANCED 107 je SHORT .ReverseA0andA3fromRegisterIndexInDX 107 cmp bl, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 108 jbe SHORT .ReverseA0andA3fromRegisterIndexInDX 108 109 109 110 ; At this point remaining controllers (JRIDE, XTCF and ADP50L) all have a control … … 154 155 IdeIO_OutputALtoIdeRegisterInDL: 155 156 xor dh, dh ; IDE Register index now in DX 156 157 157 mov bl, [di+DPT_ATA.bDevice] 158 158 cmp bl, DEVICE_8BIT_XTIDE_REV2 … … 160 160 161 161 %ifdef MODULE_8BIT_IDE_ADVANCED 162 je SHORT .ReverseA0andA3fromRegisterIndexInDX 162 cmp bl, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 163 jbe SHORT .ReverseA0andA3fromRegisterIndexInDX 163 164 164 165 cmp bl, DEVICE_8BIT_JRIDE_ISA -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdePioBlock.asm
r589 r601 55 55 56 56 ;-------------------------------------------------------------------- 57 ; IdePioBlock_ReadFromXtideRev2_Olivetti 58 ; Parameters: 59 ; CX: Block size in 512 byte sectors 60 ; DX: IDE Data port address 61 ; ES:DI: Normalized ptr to buffer to receive data 62 ; Returns: 63 ; Nothing 64 ; Corrupts registers: 65 ; AX, CX 66 ;-------------------------------------------------------------------- 67 ALIGN JUMP_ALIGN 68 IdePioBlock_ReadFromXtideRev2_Olivetti: 69 UNROLL_SECTORS_IN_CX_TO_OWORDS 70 ALIGN JUMP_ALIGN 71 .InswLoop: 72 %rep 8 ; WORDs 73 XTIDE_MOD_OLIVETTI_INSW 74 %endrep 75 loop .InswLoop 76 ret 77 78 79 ;-------------------------------------------------------------------- 57 80 ; 8-bit PIO from a single data port. 58 81 ; -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm
r589 r601 328 328 ALIGN WORD_ALIGN 329 329 g_rgfnPioRead: 330 dw IdePioBlock_ReadFrom16bitDataPort ; 0, DEVICE_16BIT_ATA330 dw IdePioBlock_ReadFrom16bitDataPort ; 0, DEVICE_16BIT_ATA 331 331 %ifdef MODULE_ADVANCED_ATA 332 dw IdePioBlock_ReadFrom32bitDataPort ; 1, DEVICE_32BIT_ATA332 dw IdePioBlock_ReadFrom32bitDataPort ; 1, DEVICE_32BIT_ATA 333 333 %elifdef MODULE_8BIT_IDE 334 334 dw NULL 335 335 %endif ; MODULE_ADVANCED_ATA 336 336 %ifdef MODULE_8BIT_IDE 337 dw IdePioBlock_ReadFrom8bitDataPort ; 2, DEVICE_8BIT_ATA 338 dw IdePioBlock_ReadFromXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 339 dw IdePioBlock_ReadFrom16bitDataPort ; 4, DEVICE_8BIT_XTIDE_REV2 337 dw IdePioBlock_ReadFrom8bitDataPort ; 2, DEVICE_8BIT_ATA 338 dw IdePioBlock_ReadFromXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 339 dw IdePioBlock_ReadFrom16bitDataPort ; 4, DEVICE_8BIT_XTIDE_REV2 340 dw IdePioBlock_ReadFromXtideRev2_Olivetti ; 5, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 340 341 %ifdef MODULE_8BIT_IDE_ADVANCED 341 dw IdePioBlock_ReadFrom8bitDataPort ; 5, DEVICE_8BIT_XTCF_PIO8342 dw IdePioBlock_ReadFrom16bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD343 dw IdePioBlock_ReadFrom16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD344 dw IdeDmaBlock_ReadFromXTCF ; 8, DEVICE_8BIT_XTCF_DMA342 dw IdePioBlock_ReadFrom8bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8 343 dw IdePioBlock_ReadFrom16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD 344 dw IdePioBlock_ReadFrom16bitDataPort ; 8, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD 345 dw IdeDmaBlock_ReadFromXTCF ; 9, DEVICE_8BIT_XTCF_DMA 345 346 %endif ; MODULE_8BIT_IDE_ADVANCED 346 347 %endif ; MODULE_8BIT_IDE … … 348 349 349 350 g_rgfnPioWrite: 350 dw IdePioBlock_WriteTo16bitDataPort ; 0, DEVICE_16BIT_ATA351 dw IdePioBlock_WriteTo16bitDataPort ; 0, DEVICE_16BIT_ATA 351 352 %ifdef MODULE_ADVANCED_ATA 352 dw IdePioBlock_WriteTo32bitDataPort ; 1, DEVICE_32BIT_ATA353 dw IdePioBlock_WriteTo32bitDataPort ; 1, DEVICE_32BIT_ATA 353 354 %elifdef MODULE_8BIT_IDE 354 355 dw NULL 355 356 %endif ; MODULE_ADVANCED_ATA 356 357 %ifdef MODULE_8BIT_IDE 357 dw IdePioBlock_WriteTo8bitDataPort ; 2, DEVICE_8BIT_ATA 358 dw IdePioBlock_WriteToXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 359 dw IdePioBlock_WriteToXtideRev2 ; 4, DEVICE_8BIT_XTIDE_REV2 358 dw IdePioBlock_WriteTo8bitDataPort ; 2, DEVICE_8BIT_ATA 359 dw IdePioBlock_WriteToXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 360 dw IdePioBlock_WriteToXtideRev2 ; 4, DEVICE_8BIT_XTIDE_REV2 361 dw IdePioBlock_WriteToXtideRev2 ; 5, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 360 362 %ifdef MODULE_8BIT_IDE_ADVANCED 361 dw IdePioBlock_WriteTo8bitDataPort ; 5, DEVICE_8BIT_XTCF_PIO8362 dw IdePioBlock_WriteTo16bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD363 dw IdePioBlock_WriteTo16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD364 dw IdeDmaBlock_WriteToXTCF ; 8, DEVICE_8BIT_XTCF_DMA363 dw IdePioBlock_WriteTo8bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8 364 dw IdePioBlock_WriteTo16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD 365 dw IdePioBlock_WriteTo16bitDataPort ; 8, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD 366 dw IdeDmaBlock_WriteToXTCF ; 9, DEVICE_8BIT_XTCF_DMA 365 367 %endif ; MODULE_8BIT_IDE_ADVANCED 366 368 %endif ; MODULE_8BIT_IDE -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/JrIdeTransfer.asm
r592 r601 100 100 jc SHORT ReturnWithMemoryIOtransferErrorInAH 101 101 102 mov cx, [bp+MEMPIOVARS.wSectorsInBlock] ; Clears CH103 cmp [bp+MEMPIOVARS.bSectorsLeft], cl102 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] ; Clears DH 103 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 104 104 jbe SHORT .ReadLastBlockFromDrive 105 105 … … 119 119 ; transferred, there will be a wait for next block but DRQ is never 120 120 ; set since all is transferred! Then we get timeout error. 121 mov cx, [bp+MEMPIOVARS.wSectorsInBlock]122 sub [bp+MEMPIOVARS.bSectorsLeft], cl123 add [bp+MEMPIOVARS.bSectorsDone], cl124 cmp [bp+MEMPIOVARS.bSectorsLeft], cl121 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] 122 sub [bp+MEMPIOVARS.bSectorsLeft], dl 123 add [bp+MEMPIOVARS.bSectorsDone], dl 124 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 125 125 ja SHORT .ReadNextBlockFromDrive 126 126 127 127 ALIGN JUMP_ALIGN 128 128 .ReadLastBlockFromDrive: 129 mov cl, [bp+MEMPIOVARS.bSectorsLeft]130 push cx129 mov dl, [bp+MEMPIOVARS.bSectorsLeft] 130 push dx 131 131 call ReadSingleBlockFromSectorAccessWindowInDSSItoESDI 132 132 … … 181 181 jc SHORT ReturnWithMemoryIOtransferErrorInAH 182 182 183 mov cx, [bp+MEMPIOVARS.wSectorsInBlock]184 cmp [bp+MEMPIOVARS.bSectorsLeft], cl183 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] 184 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 185 185 jbe SHORT .WriteLastBlockToDrive 186 186 … … 192 192 193 193 ; Increment number of successfully written WORDs 194 mov cx, [bp+MEMPIOVARS.wSectorsInBlock]195 sub [bp+MEMPIOVARS.bSectorsLeft], cl196 add [bp+MEMPIOVARS.bSectorsDone], cl197 cmp [bp+MEMPIOVARS.bSectorsLeft], cl194 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] 195 sub [bp+MEMPIOVARS.bSectorsLeft], dl 196 add [bp+MEMPIOVARS.bSectorsDone], dl 197 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 198 198 ja SHORT .WriteNextBlockToDrive 199 199 200 200 ALIGN JUMP_ALIGN 201 201 .WriteLastBlockToDrive: 202 mov cl, [bp+MEMPIOVARS.bSectorsLeft]203 push cx202 mov dl, [bp+MEMPIOVARS.bSectorsLeft] 203 push dx 204 204 ePUSH_T bx, CheckErrorsAfterTransferringLastMemoryMappedBlock 205 205 ; Fall to WriteSingleBlockFromDSSIToSectorAccessWindowInESDI … … 208 208 ; WriteSingleBlockFromDSSIToSectorAccessWindowInESDI 209 209 ; Parameters: 210 ; CX: Number of sectors in block210 ; DX: Number of sectors in block 211 211 ; DS:SI: Normalized ptr to source buffer 212 212 ; ES:DI: Ptr to Sector Access Window … … 220 220 WriteSingleBlockFromDSSIToSectorAccessWindowInESDI: 221 221 mov bx, di 222 mov dx, cx223 222 xor cx, cx 224 223 ALIGN JUMP_ALIGN … … 235 234 ; ReadSingleBlockFromSectorAccessWindowInDSSItoESDI 236 235 ; Parameters: 237 ; CX Number of sectors in full block or sectors in last partialblock238 ; ES:DI: Normalized ptr to buffer to receive data (destination)239 ; DS:SI: Ptr to Sector Access Window (source)236 ; DX: Number of sectors in block 237 ; ES:DI: Normalized ptr to destination buffer 238 ; DS:SI: Ptr to Sector Access Window 240 239 ; Returns: 241 240 ; CX, DX: Zero … … 247 246 ReadSingleBlockFromSectorAccessWindowInDSSItoESDI: 248 247 mov bx, si 249 mov dx, cx250 248 xor cx, cx 251 249 ALIGN JUMP_ALIGN -
trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm
r567 r601 43 43 ALIGN JUMP_ALIGN 44 44 SerialCommand_OutputWithParameters: 45 mov ah, SerialServer_Command_Read 46 mov al, [bp+IDEPACK.bCommand] 45 47 46 mov ah,SerialServer_Command_Read 47 48 mov al,[bp+IDEPACK.bCommand] 49 50 cmp al,20h ; Read Sectors IDE command 51 jz .readOrWrite 52 inc ah ; now SerialServer_Protocol_Write 53 cmp al,30h ; Write Sectors IDE command 54 jz .readOrWrite 48 cmp al, 20h ; Read Sectors IDE command 49 je SHORT .readOrWrite 50 inc ah ; now SerialServer_Protocol_Write 51 cmp al, 30h ; Write Sectors IDE command 52 je SHORT .readOrWrite 55 53 56 54 ; all other commands return success 57 55 ; including function 0ech which should return drive information, this is handled with the identify functions 58 56 ; 59 xor ah,ah; also clears carry60 57 xor ah, ah ; also clears carry 58 ret 61 59 62 60 .readOrWrite: 63 mov [bp+IDEPACK.bFeatures],ah ; store protocol command61 mov [bp+IDEPACK.bFeatures], ah ; store protocol command 64 62 %ifdef USE_AT 65 63 mov dh, [bp+IDEPACK.bSectorCount] 66 64 %endif 67 65 call IdeTransfer_NormalizePointerInESSI 68 66 %ifdef USE_AT 69 70 xor cx, cx; Nothing transferred71 72 67 jnc SHORT .PointerNormalizationWasSuccessful 68 xor cx, cx ; Nothing transferred 69 stc 70 ret 73 71 .PointerNormalizationWasSuccessful: 74 72 %endif 75 73 76 mov dx, [di+DPT_SERIAL.wSerialPortAndBaud] 77 74 mov dx, [di+DPT_SERIAL.wSerialPortAndBaud] 78 75 ; fall through to SerialCommand_FallThroughToSerialServer_SendReceive 79 76 80 77 ALIGN JUMP_ALIGN 81 78 SerialCommand_FallThroughToSerialServer_SendReceive: 82 83 79 ; fall through to SerialServer_SendReceive 84 85 80 %include "SerialServer.asm" 86 81 … … 93 88 ALIGN JUMP_ALIGN 94 89 SerialCommand_ReturnError: 95 96 90 stc 91 ret 97 92 98 93 ;-------------------------------------------------------------------- … … 155 150 ; master scan. 156 151 ; 157 mov dx,[cs:bp+IDEVARS.wSerialPortAndBaud]158 xor ax,ax152 mov dx, [cs:bp+IDEVARS.wSerialPortAndBaud] 153 xor ax, ax 159 154 160 161 162 155 push si 156 call FindDPT_ToDSDIforSerialDevice 157 pop si 163 158 %ifdef MODULE_SERIAL_FLOPPY 164 jnc.founddpt159 jnc SHORT .founddpt 165 160 ; 166 161 ; If not found above with FindDPT_ToDSDIforSerialDevice, DI will point to the DPT after the last hard disk DPT 167 162 ; So, if there was a previously found floppy disk, DI will point to that DPT and we use that value for the slave. 168 163 ; 169 cmp byte[RAMVARS.xlateVars+XLATEVARS.bFlopCntAndFirst], 0170 jz.notfounddpt164 cmp BYTE [RAMVARS.xlateVars+XLATEVARS.bFlopCntAndFirst], 0 165 je SHORT .notfounddpt 171 166 .founddpt: 172 167 %else 173 jc.notfounddpt168 jc SHORT .notfounddpt 174 169 %endif 175 170 mov ax, [di+DPT_SERIAL.wSerialPortAndBaud] 176 171 .notfounddpt: 172 test bh, FLG_DRVNHEAD_DRV 173 jz SHORT .master 177 174 178 test bh, FLG_DRVNHEAD_DRV 179 jz .master 180 181 test ax,ax ; Take care of the case that is different between master and slave. 182 jz SerialCommand_ReturnError 175 test ax, ax ; Take care of the case that is different between master and slave. 176 jz SHORT SerialCommand_ReturnError 183 177 184 178 ; fall-through 185 179 .master: 186 test dx,dx187 jnz.identifyDeviceInDX180 test dx, dx 181 jnz SHORT .identifyDeviceInDX 188 182 189 xchg dx, ax; move ax to dx (move previously found serial drive to dx, could be zero)183 xchg dx, ax ; move ax to dx (move previously found serial drive to dx, could be zero) 190 184 191 185 .identifyDeviceInDX: 192 193 186 ; fall through to SerialCommand_FallThroughToSerialServerScan_ScanForServer 194 187 195 188 ALIGN JUMP_ALIGN 196 189 SerialCommand_FallThroughToSerialServerScan_ScanForServer: 197 198 190 ; fall through to SerialServerScan_ScanForServer 199 200 191 %include "SerialServerScan.asm" 201 192 … … 206 197 %endif 207 198 208 -
trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialDPT.asm
r567 r601 33 33 ;-------------------------------------------------------------------- 34 34 SerialDPT_Finalize: 35 36 35 mov ax, [es:si+SerialServer_ATA_wPortAndBaud] 36 mov [di+DPT_SERIAL.wSerialPortAndBaud], ax 37 37 38 38 ; … … 41 41 ; if the floppy support is disabled. 42 42 ; 43 mov al, [es:si+SerialServer_ATA_wDriveFlags] 44 eSHL_IM al, 1 45 mov byte [di+DPT.bFlagsHigh], al 46 47 ret 43 mov al, [es:si+SerialServer_ATA_wDriveFlags] 44 eSHL_IM al, 1 45 mov BYTE [di+DPT.bFlagsHigh], al 46 ret 48 47 49 48 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm
r599 r601 106 106 cli 107 107 mov ax, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.fpPrevTimerHandler] 108 mov [es: SYSTEM_TIMER_TICK*4], ax108 mov [es:BIOS_SYSTEM_TIMER_TICK_INTERRUPT_1Ch*4], ax 109 109 mov ax, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.fpPrevTimerHandler+2] 110 mov [es: SYSTEM_TIMER_TICK*4+2], ax110 mov [es:BIOS_SYSTEM_TIMER_TICK_INTERRUPT_1Ch*4+2], ax 111 111 sti 112 112 %endif … … 214 214 ; Switches back to the POST stack, clears the DS and ES registers, 215 215 ; and either jumps to the MBR (Master Boot Record) that was just read, 216 ; or calls the ROM's boot routine on interrupt 18 .216 ; or calls the ROM's boot routine on interrupt 18h. 217 217 ; 218 218 ; Parameters: -
trunk/XTIDE_Universal_BIOS/Src/Initialization/AdvancedAta/AdvAtaInit.asm
r596 r601 36 36 ;-------------------------------------------------------------------- 37 37 AdvAtaInit_DetectControllerForIdeBaseInBX: 38 ; Detect if system has PCI bus. If it does, we can skip VLB detection. This is 38 ; Detect if system has PCI bus. If it does, we can skip VLB detection. This is a 39 39 ; good thing since detecting Vision QD6580 is dangerous since Intel PIIX4 south bridge 40 40 ; mirrors Interrupt Controller registers from Axh to Bxh. This can lead to faulty … … 45 45 push bx 46 46 push di 47 xor edi, edi ; Some BIOSes require this to be set to zero 48 mov ax, PCI_INSTALLATION_CHECK 49 int BIOS_TIME_PCI_PNP_1Ah 47 ; xor edi, edi ; Some BIOSes require this to be set to zero 48 ; *FIXME* The above instruction is commented away since RBIL says that this 49 ; only applies to software looking for the protected-mode entry point. 50 mov ax, PCI_INSTALLATION_CHECK ; May corrupt EAX, EBX, ECX, EDX, EDI 51 int BIOS_TIME_PCI_PNP_INTERRUPT_1Ah 50 52 pop di 51 53 pop bx -
trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm
r599 r601 98 98 ; Here we might want to replace BIOS configured drives with the ones we detected. 99 99 ; Primary reason is to support dynamic overlay feature in the future. Second reason 100 ; is a hack to get Windows 95 load proper IDE drivers.100 ; is a hack to get Windows 95 to load its built-in protected mode IDE driver. 101 101 ; 102 102 ; The Windows hack has two parts. First part is to try to alter CMOS address 12h as that … … 109 109 110 110 %ifdef USE_AT ; FLG_ROMVARS_IGNORE_MOTHERBOARD_DRIVES is for AT builds only 111 112 %ifdef MODULE_WIN95_CMOS_HACK 113 mov dl, HARD_DISK_TYPES 114 call CMOS_ReadFromIndexInDLtoAL 115 test al, 0F0h 116 jnz SHORT .ClearBdaDriveCount ; CMOS byte 12h is ready for Windows 95 117 call CMOS_Verify10hTo2Dh ; Can we modify CMOS? 118 jnz SHORT .ClearBdaDriveCount ; Unsupported BIOS, use plan B 119 120 ; Now we can alter CMOS location 12h. Award BIOS locks if we set drive 0 type to Fh 121 ; (but accept changes to drive type 1). Windows 95 requires that the drive 0 type is 122 ; non zero and ignores drive 1 type. So if we only set drive 1, then Award BIOS 123 ; won't give problems but Windows 95 stays in MS-DOS compatibility mode. 124 ; 125 ; For Award BIOSes we could set the Drive 0 type to 1 and then clear the BDA drive count. 126 ; So essentially we could automatically do what user needs to do manually to get Windows 95 127 ; working on Award BIOSes. However, I think that should be left to do manually since 128 ; there may be SCSI drives on the system or FLG_ROMVARS_IGNORE_MOTHERBOARD_DRIVES could 129 ; be intentionally cleared and forcing the dummy drive might cause only trouble. 130 131 ; Try to detect Award BIOS (Seems to work on a tested 128k BIOS so hopefully 132 ; there will be no need to scan E000h segment) 133 mov cx, 65536 - 4 134 mov eax, 'Awar' ; Four characters should be enough 135 mov di, 0F000h ; Scan 64k starting from segment F000h 136 mov fs, di ; No need to preserve FS since we set it to zero soon when we boot 137 xor di, di 138 .ScanNextCharacters: 139 cmp [fs:di], eax 140 je SHORT .ClearBdaDriveCount ; Award detected, cannot modify CMOS 141 inc di ; Increment offset by one character (not four) 142 loop .ScanNextCharacters 143 144 ; Now it should be safe to write 145 mov dl, HARD_DISK_TYPES 146 mov al, 0F0h ; Drive 0 type 16...47 (supposed to be defined elsewhere in the CMOS) 147 call CMOS_WriteALtoIndexInDL 148 call CMOS_StoreNewChecksumFor10hto2Dh 111 %ifdef MODULE_WIN95_CMOS_HACK 112 mov dl, HARD_DISK_TYPES 113 call CMOS_ReadFromIndexInDLtoAL 114 test al, 0F0h 115 jnz SHORT .ClearBdaDriveCount ; CMOS byte 12h is ready for Windows 95 116 call CMOS_Verify10hTo2Dh ; Can we modify CMOS? 117 jnz SHORT .ClearBdaDriveCount ; Unsupported BIOS, use plan B 118 119 ; Now we can alter CMOS location 12h. Award BIOS locks if we set drive 0 type to Fh 120 ; (but accept changes to drive type 1). Windows 95 requires that the drive 0 type is 121 ; non zero and ignores drive 1 type. So if we only set drive 1, then Award BIOS 122 ; won't give problems but Windows 95 stays in MS-DOS compatibility mode. 123 ; 124 ; For Award BIOSes we could set the Drive 0 type to 1 and then clear the BDA drive count. 125 ; So essentially we could automatically do what user needs to do manually to get Windows 95 126 ; working on Award BIOSes. However, I think that should be left to do manually since 127 ; there may be SCSI drives on the system or FLG_ROMVARS_IGNORE_MOTHERBOARD_DRIVES could 128 ; be intentionally cleared and forcing the dummy drive might cause only trouble. 129 130 ; Try to detect Award BIOS (Seems to work on a tested 128k BIOS so hopefully 131 ; there will be no need to scan E000h segment) 132 mov cx, 65536 - 4 133 mov eax, 'Awar' ; Four characters should be enough 134 mov di, 0F000h ; Scan 64k starting from segment F000h 135 mov fs, di ; No need to preserve FS since we set it to zero soon when we boot 136 xor di, di 137 .ScanNextCharacters: 138 cmp [fs:di], eax 139 je SHORT .ClearBdaDriveCount ; Award detected, cannot modify CMOS 140 inc di ; Increment offset by one character (not four) 141 loop .ScanNextCharacters 142 143 ; Now it should be safe to write 144 mov dl, HARD_DISK_TYPES 145 mov al, 0F0h ; Drive 0 type 16...47 (supposed to be defined elsewhere in the CMOS) 146 call CMOS_WriteALtoIndexInDL 147 call CMOS_StoreNewChecksumFor10hto2Dh 149 148 .ClearBdaDriveCount: 150 %endif; MODULE_WIN95_CMOS_HACK149 %endif ; MODULE_WIN95_CMOS_HACK 151 150 152 151 test BYTE [cs:ROMVARS.wFlags], FLG_ROMVARS_IGNORE_MOTHERBOARD_DRIVES 153 152 jz SHORT .ContinueInitialization 154 mov BYTE [es:BDA.bHDCount], 0 ; Set hard disk count to zero153 mov BYTE [es:BDA.bHDCount], 0 ; Set hard disk count to zero 155 154 .ContinueInitialization: 156 %endif 157 158 mov cx, [RAMVARS.wDrvCntAndFlopCnt] 155 %endif ; USE_AT 156 157 mov cx, [RAMVARS.wDrvCntAndFlopCnt] ; Our count of hard disks 159 158 mov al, [es:BDA.bHDCount] 160 add [es:BDA.bHDCount], cl ; Add our drives to the system count161 or al, 80h ; Or in hard disk flag162 mov [RAMVARS.bFirstDrv], al ; Store first drive number159 add [es:BDA.bHDCount], cl ; Add our drives to the system count 160 or al, 80h ; Or in hard disk flag 161 mov [RAMVARS.bFirstDrv], al ; Store first drive number 163 162 164 163 .AddFloppies: … … 170 169 dec ch 171 170 mov al, ch 172 js .NoFloppies ; if no drives are present, we store 0ffh171 js SHORT .NoFloppies ; If no drives are present, we store 0FFh 173 172 174 173 call FloppyDrive_GetCountFromBIOS_or_BDA … … 242 241 ;-------------------------------------------------------------------- 243 242 .ReadAtaInfoFromHardDisk: 244 mov si, BOOTVARS.rgbAtaInfo ; ES:SI now points to ATA info location243 mov si, BOOTVARS.rgbAtaInfo ; ES:SI now points to ATA info location 245 244 push es 246 245 push si … … 255 254 ; Fall to .ReadAtapiInfoFromDrive 256 255 257 .ReadAtapiInfoFromDrive: ; Not yet implemented258 ;call ReadAtapiInfoFromDrive ; Assume CD-ROM256 .ReadAtapiInfoFromDrive: ; Not yet implemented 257 ;call ReadAtapiInfoFromDrive ; Assume CD-ROM 259 258 ;jnc SHORT _CreateBiosTablesForCDROM 260 259 -
trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenuPrintCfg.asm
r592 r601 4 4 ; 5 5 ; Included by BootMenuPrint.asm, this routine is to be inserted into 6 ; BootMenuPrint_ HardDiskRefreshInformation.6 ; BootMenuPrint_RefreshInformation. 7 7 ; 8 8 … … 26 26 SECTION .text 27 27 28 ;;; fall-into from BootMenuPrint_ HardDiskRefreshInformation.28 ;;; fall-into from BootMenuPrint_RefreshInformation. 29 29 30 30 ;-------------------------------------------------------------------- … … 32 32 ; Cursor is set to configuration header string position. 33 33 ; 34 ; BootMenuPrintCfg_ForOurDrive34 ; .BootMenuPrintCfg_ForOurDrive 35 35 ; Parameters: 36 36 ; DS:DI: Pointer to DPT … … 38 38 ; Nothing 39 39 ; Corrupts registers: 40 ; AX, BX, CX,DX40 ; AX, BX, DX 41 41 ;-------------------------------------------------------------------- 42 42 .BootMenuPrintCfg_ForOurDrive: 43 eMOVZX ax, [di+DPT.bIdevarsOffset]44 xchg bx, ax ; CS:BX now points to IDEVARS45 43 ; Fall to .PushAddressingMode 46 44 … … 49 47 ; Parameters: 50 48 ; DS:DI: Ptr to DPT 51 ; CS:BX: Ptr to IDEVARS52 49 ; Returns: 53 50 ; Nothing (falls to next push below) 54 51 ; Corrupts registers: 55 ; AX, CX, DX52 ; AX, BX, DX 56 53 ;-------------------------------------------------------------------- 57 54 .PushAddressingMode: … … 66 63 imul ax, g_szAddressingModes_Displacement << (8-TRANSLATEMODE_FIELD_POSITION) 67 64 %else 68 mov cx, g_szAddressingModes_Displacement << (8-TRANSLATEMODE_FIELD_POSITION)69 mul cx65 mov bx, g_szAddressingModes_Displacement << (8-TRANSLATEMODE_FIELD_POSITION) 66 mul bx 70 67 %endif 71 68 xchg al, ah ; AL = always zero after above multiplication … … 78 75 ; Parameters: 79 76 ; DS:DI: Ptr to DPT 80 ; CS:BX: Ptr to IDEVARS81 77 ; Returns: 82 78 ; Nothing (falls to next push below) … … 97 93 ; Parameters: 98 94 ; DS:DI: Ptr to DPT 99 ; CS:BX: Ptr to IDEVARS100 95 ; Returns: 101 96 ; Nothing (falls to next push below) 102 97 ; Corrupts registers: 103 ; AX 98 ; AX, BX 104 99 ;-------------------------------------------------------------------- 105 100 .PushDeviceType: 101 call AccessDPT_GetIdevarsToCSBX 106 102 %ifndef MODULE_SERIAL 107 103 mov al, g_szDeviceTypeValues_Displacement … … 155 151 ; Nothing (falls to next push below) 156 152 ; Corrupts registers: 157 ; A X, BX, DX, ES153 ; AL 158 154 ;-------------------------------------------------------------------- 159 155 .PushResetStatus: … … 161 157 push ax 162 158 163 ;;; fall-out to BootMenuPrint_ HardDiskRefreshInformation.159 ;;; fall-out to BootMenuPrint_RefreshInformation. -
trunk/XTIDE_Universal_BIOS/Src/Menus/HotkeyBar.asm
r600 r601 33 33 ; Nothing 34 34 ; Corrupts registers: 35 ; AX, CX, DX, SI, DI 36 ;-------------------------------------------------------------------- 35 ; Nothing 36 ;-------------------------------------------------------------------- 37 ALIGN JUMP_ALIGN 37 38 HotkeyBar_TimerTickHandler: 38 39 push es … … 56 57 ; Call previous handler 57 58 pushf 58 call far[es:BOOTVARS.hotkeyVars+HOTKEYVARS.fpPrevTimerHandler]59 call FAR [es:BOOTVARS.hotkeyVars+HOTKEYVARS.fpPrevTimerHandler] 59 60 60 61 ; Update Hotkeybar (process key input and draw) every fourth tick … … 98 99 mov BYTE [RAMVARS.bTimeoutTicksLeft], 0 99 100 .ContinueDrawing: 100 101 101 ; Fall to HotkeyBar_DrawToTopOfScreen 102 102 … … 141 141 142 142 ; Clear CH if floppy drive is selected for boot 143 %if 0 ; Not needed until more flags added 144 mov ch, FLG_HOTKEY_HD_FIRST 145 and ch, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bFlags] 146 %else 143 147 mov ch, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bFlags] 144 ;and ch, FLG_HOTKEY_HD_FIRST; Not needed until more flags added 148 %endif 145 149 call FormatDriveHotkeyString 146 150 … … 428 432 429 433 ; Store system 1Ch Timer Tick handler and install our hotkeybar handler 430 mov ax, [ SYSTEM_TIMER_TICK*4]434 mov ax, [BIOS_SYSTEM_TIMER_TICK_INTERRUPT_1Ch*4] 431 435 mov [BOOTVARS.hotkeyVars+HOTKEYVARS.fpPrevTimerHandler], ax 432 mov ax, [ SYSTEM_TIMER_TICK*4+2]436 mov ax, [BIOS_SYSTEM_TIMER_TICK_INTERRUPT_1Ch*4+2] 433 437 mov [BOOTVARS.hotkeyVars+HOTKEYVARS.fpPrevTimerHandler+2], ax 434 mov al, SYSTEM_TIMER_TICK438 mov al, BIOS_SYSTEM_TIMER_TICK_INTERRUPT_1Ch 435 439 mov si, HotkeyBar_TimerTickHandler 436 440 call Interrupts_InstallHandlerToVectorInALFromCSSI -
trunk/XTIDE_Universal_BIOS/Src/Strings.asm
r589 r601 135 135 136 136 g_szDeviceTypeValues: 137 g_szDeviceTypeValues_16bit: db " 16",NULL137 g_szDeviceTypeValues_16bit: db " 16",NULL 138 138 %ifdef MODULE_ADVANCED_ATA OR MODULE_8BIT_IDE OR MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 139 g_szDeviceTypeValues_32bit: db " 32",NULL139 g_szDeviceTypeValues_32bit: db " 32",NULL 140 140 %ifdef MODULE_8BIT_IDE OR MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 141 g_szDeviceTypeValues_8bit: db " 8",NULL 142 g_szDeviceTypeValues_XTIDEr1: db "D8 ",NULL ; Dual 8-bit 143 g_szDeviceTypeValues_XTIDEr2: db "X8 ",NULL ; A0<->A3 swapped 8-bit 141 g_szDeviceTypeValues_8bit: db " 8",NULL 142 g_szDeviceTypeValues_XTIDEr1: db "D8 ",NULL ; Dual 8-bit 143 g_szDeviceTypeValues_XTIDEr2: db "X8 ",NULL ; A0<->A3 swapped 8-bit 144 g_szDeviceTypeValues_XTIDEr2_Olivetti: db "X8O",NULL ; Same as above but in Olivetti M24 and derivatives 144 145 %ifdef MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 145 g_szDeviceTypeValues_XTCFpio8: db "T8 ",NULL ; True 8-bit146 g_szDeviceTypeValues_XTCFpio8BIU: db "T8B",NULL147 g_szDeviceTypeValues_XTCFpio16BIU: db "16B",NULL148 g_szDeviceTypeValues_XTCFdma: db "8MA",NULL ; DMA 8-bit149 g_szDeviceTypeValues_JrIde: db "M8 ",NULL ; Memory Mapped 8-bit150 g_szDeviceTypeValues_ADP50L: db "M8 ",NULL ; Memory Mapped 8-bit146 g_szDeviceTypeValues_XTCFpio8: db "T8 ",NULL ; True 8-bit 147 g_szDeviceTypeValues_XTCFpio8BIU: db "T8B",NULL 148 g_szDeviceTypeValues_XTCFpio16BIU: db "16B",NULL 149 g_szDeviceTypeValues_XTCFdma: db "8MA",NULL ; DMA 8-bit 150 g_szDeviceTypeValues_JrIde: db "M8 ",NULL ; Memory Mapped 8-bit 151 g_szDeviceTypeValues_ADP50L: db "M8 ",NULL ; Memory Mapped 8-bit 151 152 %ifdef MODULE_SERIAL 152 g_szDeviceTypeValues_Serial: db "SER",NULL153 g_szDeviceTypeValues_Serial: db "SER",NULL 153 154 %endif ; MODULE_SERIAL 154 155 %endif ; MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL … … 183 184 %error "g_szDeviceTypeValues Displacement Incorrect 5" 184 185 %endif 186 %if g_szDeviceTypeValues_XTIDEr2_Olivetti <> g_szDeviceTypeValues_XTIDEr2 + g_szDeviceTypeValues_Displacement 187 %error "g_szDeviceTypeValues Displacement Incorrect 6" 188 %endif 185 189 186 190 %ifdef MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 187 191 188 %if g_szDeviceTypeValues_XTCFpio8 <> g_szDeviceTypeValues_XTIDEr2 + g_szDeviceTypeValues_Displacement189 %error "g_szDeviceTypeValues Displacement Incorrect 6"192 %if g_szDeviceTypeValues_XTCFpio8 <> g_szDeviceTypeValues_XTIDEr2_Olivetti + g_szDeviceTypeValues_Displacement 193 %error "g_szDeviceTypeValues Displacement Incorrect 7" 190 194 %endif 191 195 %if g_szDeviceTypeValues_XTCFpio8BIU <> g_szDeviceTypeValues_XTCFpio8 + g_szDeviceTypeValues_Displacement 192 %error "g_szDeviceTypeValues Displacement Incorrect 7"196 %error "g_szDeviceTypeValues Displacement Incorrect 8" 193 197 %endif 194 198 %if g_szDeviceTypeValues_XTCFpio16BIU <> g_szDeviceTypeValues_XTCFpio8BIU + g_szDeviceTypeValues_Displacement 195 %error "g_szDeviceTypeValues Displacement Incorrect 8"199 %error "g_szDeviceTypeValues Displacement Incorrect 9" 196 200 %endif 197 201 %if g_szDeviceTypeValues_XTCFdma <> g_szDeviceTypeValues_XTCFpio16BIU + g_szDeviceTypeValues_Displacement 198 %error "g_szDeviceTypeValues Displacement Incorrect 9"202 %error "g_szDeviceTypeValues Displacement Incorrect 10" 199 203 %endif 200 204 %if g_szDeviceTypeValues_JrIde <> g_szDeviceTypeValues_XTCFdma + g_szDeviceTypeValues_Displacement 201 %error "g_szDeviceTypeValues Displacement Incorrect 1 0"205 %error "g_szDeviceTypeValues Displacement Incorrect 11" 202 206 %endif 203 207 %if g_szDeviceTypeValues_ADP50L <> g_szDeviceTypeValues_JrIde + g_szDeviceTypeValues_Displacement 204 %error "g_szDeviceTypeValues Displacement Incorrect 1 1"208 %error "g_szDeviceTypeValues Displacement Incorrect 12" 205 209 %endif 206 210 … … 208 212 209 213 %if g_szDeviceTypeValues_Serial <> g_szDeviceTypeValues_ADP50L + g_szDeviceTypeValues_Displacement 210 %error "g_szDeviceTypeValues Displacement Incorrect 1 2"214 %error "g_szDeviceTypeValues Displacement Incorrect 13" 211 215 %endif 212 216 -
trunk/XTIDE_Universal_BIOS/Src/StringsCompressed.asm
r589 r601 253 253 254 254 g_szDeviceTypeValues: 255 g_szDeviceTypeValues_16bit: ; db " 16",NULL256 ; db 20h, 31h, 36h, 00h ; uncompressed257 db 20h, 2bh, 0fh ; compressed255 g_szDeviceTypeValues_16bit: ; db " 16",NULL 256 ; db 20h, 31h, 36h, 00h ; uncompressed 257 db 20h, 2bh, 0fh ; compressed 258 258 259 259 %ifdef MODULE_ADVANCED_ATA OR MODULE_8BIT_IDE OR MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 260 g_szDeviceTypeValues_32bit: ; db " 32",NULL261 ; db 20h, 33h, 32h, 00h ; uncompressed262 db 20h, 2dh, 0ch ; compressed260 g_szDeviceTypeValues_32bit: ; db " 32",NULL 261 ; db 20h, 33h, 32h, 00h ; uncompressed 262 db 20h, 2dh, 0ch ; compressed 263 263 264 264 %ifdef MODULE_8BIT_IDE OR MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 265 g_szDeviceTypeValues_8bit: ; db " 8",NULL 266 ; db 20h, 20h, 38h, 00h ; uncompressed 267 db 20h, 20h, 10h ; compressed 268 269 g_szDeviceTypeValues_XTIDEr1: ; db "D8 ",NULL ; Dual 8-bit 270 ; db 44h, 38h, 20h, 00h ; uncompressed 271 db 4ah, 30h, 00h ; compressed 272 273 g_szDeviceTypeValues_XTIDEr2: ; db "X8 ",NULL ; A0<->A3 swapped 8-bit 274 ; db 58h, 38h, 20h, 00h ; uncompressed 275 db 5eh, 30h, 00h ; compressed 265 g_szDeviceTypeValues_8bit: ; db " 8",NULL 266 ; db 20h, 20h, 38h, 00h ; uncompressed 267 db 20h, 20h, 10h ; compressed 268 269 g_szDeviceTypeValues_XTIDEr1: ; db "D8 ",NULL ; Dual 8-bit 270 ; db 44h, 38h, 20h, 00h ; uncompressed 271 db 4ah, 30h, 00h ; compressed 272 273 g_szDeviceTypeValues_XTIDEr2: ; db "X8 ",NULL ; A0<->A3 swapped 8-bit 274 ; db 58h, 38h, 20h, 00h ; uncompressed 275 db 5eh, 30h, 00h ; compressed 276 277 g_szDeviceTypeValues_XTIDEr2_Olivetti: ; db "X8O",NULL ; Same as above but in Olivetti M24 and derivatives 278 ; db 58h, 38h, 4fh, 00h ; uncompressed 279 db 5eh, 30h, 95h ; compressed 276 280 277 281 %ifdef MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 278 g_szDeviceTypeValues_XTCFpio8: ; db "T8 ",NULL ; True 8-bit279 ; db 54h, 38h, 20h, 00h ; uncompressed280 db 5ah, 30h, 00h ; compressed281 282 g_szDeviceTypeValues_XTCFpio8BIU: ; db "T8B",NULL283 ; db 54h, 38h, 42h, 00h ; uncompressed284 db 5ah, 30h, 88h ; compressed285 286 g_szDeviceTypeValues_XTCFpio16BIU: ; db "16B",NULL287 ; db 31h, 36h, 42h, 00h ; uncompressed288 db 2bh, 2fh, 88h ; compressed289 290 g_szDeviceTypeValues_XTCFdma: ; db "8MA",NULL ; DMA 8-bit291 ; db 38h, 4dh, 41h, 00h ; uncompressed292 db 30h, 53h, 87h ; compressed293 294 g_szDeviceTypeValues_JrIde: ; db "M8 ",NULL ; Memory Mapped 8-bit295 ; db 4dh, 38h, 20h, 00h ; uncompressed296 db 53h, 30h, 00h ; compressed297 298 g_szDeviceTypeValues_ADP50L: ; db "M8 ",NULL ; Memory Mapped 8-bit299 ; db 4dh, 38h, 20h, 00h ; uncompressed300 db 53h, 30h, 00h ; compressed282 g_szDeviceTypeValues_XTCFpio8: ; db "T8 ",NULL ; True 8-bit 283 ; db 54h, 38h, 20h, 00h ; uncompressed 284 db 5ah, 30h, 00h ; compressed 285 286 g_szDeviceTypeValues_XTCFpio8BIU: ; db "T8B",NULL 287 ; db 54h, 38h, 42h, 00h ; uncompressed 288 db 5ah, 30h, 88h ; compressed 289 290 g_szDeviceTypeValues_XTCFpio16BIU: ; db "16B",NULL 291 ; db 31h, 36h, 42h, 00h ; uncompressed 292 db 2bh, 2fh, 88h ; compressed 293 294 g_szDeviceTypeValues_XTCFdma: ; db "8MA",NULL ; DMA 8-bit 295 ; db 38h, 4dh, 41h, 00h ; uncompressed 296 db 30h, 53h, 87h ; compressed 297 298 g_szDeviceTypeValues_JrIde: ; db "M8 ",NULL ; Memory Mapped 8-bit 299 ; db 4dh, 38h, 20h, 00h ; uncompressed 300 db 53h, 30h, 00h ; compressed 301 302 g_szDeviceTypeValues_ADP50L: ; db "M8 ",NULL ; Memory Mapped 8-bit 303 ; db 4dh, 38h, 20h, 00h ; uncompressed 304 db 53h, 30h, 00h ; compressed 301 305 302 306 %ifdef MODULE_SERIAL 303 g_szDeviceTypeValues_Serial: ; db "SER",NULL304 ; db 53h, 45h, 52h, 00h ; uncompressed305 db 59h, 4bh, 98h ; compressed307 g_szDeviceTypeValues_Serial: ; db "SER",NULL 308 ; db 53h, 45h, 52h, 00h ; uncompressed 309 db 59h, 4bh, 98h ; compressed 306 310 307 311 %endif ; MODULE_SERIAL … … 337 341 %error "g_szDeviceTypeValues Displacement Incorrect 5" 338 342 %endif 343 %if g_szDeviceTypeValues_XTIDEr2_Olivetti <> g_szDeviceTypeValues_XTIDEr2 + g_szDeviceTypeValues_Displacement 344 %error "g_szDeviceTypeValues Displacement Incorrect 6" 345 %endif 339 346 340 347 %ifdef MODULE_8BIT_IDE_ADVANCED OR MODULE_SERIAL 341 348 342 %if g_szDeviceTypeValues_XTCFpio8 <> g_szDeviceTypeValues_XTIDEr2 + g_szDeviceTypeValues_Displacement343 %error "g_szDeviceTypeValues Displacement Incorrect 6"349 %if g_szDeviceTypeValues_XTCFpio8 <> g_szDeviceTypeValues_XTIDEr2_Olivetti + g_szDeviceTypeValues_Displacement 350 %error "g_szDeviceTypeValues Displacement Incorrect 7" 344 351 %endif 345 352 %if g_szDeviceTypeValues_XTCFpio8BIU <> g_szDeviceTypeValues_XTCFpio8 + g_szDeviceTypeValues_Displacement 346 %error "g_szDeviceTypeValues Displacement Incorrect 7"353 %error "g_szDeviceTypeValues Displacement Incorrect 8" 347 354 %endif 348 355 %if g_szDeviceTypeValues_XTCFpio16BIU <> g_szDeviceTypeValues_XTCFpio8BIU + g_szDeviceTypeValues_Displacement 349 %error "g_szDeviceTypeValues Displacement Incorrect 8"356 %error "g_szDeviceTypeValues Displacement Incorrect 9" 350 357 %endif 351 358 %if g_szDeviceTypeValues_XTCFdma <> g_szDeviceTypeValues_XTCFpio16BIU + g_szDeviceTypeValues_Displacement 352 %error "g_szDeviceTypeValues Displacement Incorrect 9"359 %error "g_szDeviceTypeValues Displacement Incorrect 10" 353 360 %endif 354 361 %if g_szDeviceTypeValues_JrIde <> g_szDeviceTypeValues_XTCFdma + g_szDeviceTypeValues_Displacement 355 %error "g_szDeviceTypeValues Displacement Incorrect 1 0"362 %error "g_szDeviceTypeValues Displacement Incorrect 11" 356 363 %endif 357 364 %if g_szDeviceTypeValues_ADP50L <> g_szDeviceTypeValues_JrIde + g_szDeviceTypeValues_Displacement 358 %error "g_szDeviceTypeValues Displacement Incorrect 1 1"365 %error "g_szDeviceTypeValues Displacement Incorrect 12" 359 366 %endif 360 367 … … 362 369 363 370 %if g_szDeviceTypeValues_Serial <> g_szDeviceTypeValues_ADP50L + g_szDeviceTypeValues_Displacement 364 %error "g_szDeviceTypeValues Displacement Incorrect 1 2"371 %error "g_szDeviceTypeValues Displacement Incorrect 13" 365 372 %endif 366 373 … … 594 601 595 602 ;; translated usage stats 596 ;; 34:3 603 ;; 54:2 604 ;; 172:2 605 ;; 171:2 606 ;; 47:2 607 ;; 53:2 608 ;; 175:1 609 ;; 56:9 610 ;; 45:2 611 ;; 50:2 612 ;; 200:1 613 ;; 33:1 614 ;; 51:3 597 615 ;; 179:8 598 616 ;; 46:3 617 ;; 48:2 618 ;; 34:3 619 ;; 49:2 620 ;; 181:1 599 621 ;; 44:1 600 ;; 200:1601 ;; 48:2602 ;; 175:1603 ;; 171:2604 ;; 51:3605 ;; 50:2606 ;; 33:1607 ;; 53:2608 ;; 45:2609 ;; 47:2610 ;; 172:2611 ;; 56:8612 622 ;; 32:34 613 ;; 181:1614 ;; 54:2615 ;; 49:2616 623 ;; total translated: 20 617 624 618 625 ;; format usage stats 619 ;; 5-x:1 626 ;; 5-u:2 627 ;; z:2 628 ;; nl:12 629 ;; x:5 630 ;; A:4 620 631 ;; 2-u:1 621 632 ;; s:14 622 ;; nl:12623 ;; A:4624 ;; 5-u:2625 ;; x:5626 633 ;; 2-I:1 627 ;; z:2634 ;; 5-x:1 628 635 ;; u:6 629 636 ;; c:13 … … 652 659 ;; 77,M:7 653 660 ;; 78,N:2 654 ;; 79,O: 2661 ;; 79,O:3 655 662 ;; 80,P:1 656 663 ;; 81,Q:1 … … 661 668 ;; 86,V: 662 669 ;; 87,W: 663 ;; 88,X: 1670 ;; 88,X:2 664 671 ;; 89,Y: 665 672 ;; 90,Z: -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm
r592 r601 193 193 dw DEVICE_8BIT_XTIDE_REV1 194 194 dw DEVICE_8BIT_XTIDE_REV2 195 dw DEVICE_8BIT_XTIDE_REV2_OLIVETTI 195 196 dw DEVICE_8BIT_XTCF_PIO8 196 197 dw DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD … … 206 207 dw g_szValueCfgDeviceRev1 207 208 dw g_szValueCfgDeviceRev2 209 dw g_szValueCfgDeviceRev2Olivetti 208 210 dw g_szValueCfgDeviceXTCFPio8 209 211 dw g_szValueCfgDeviceXTCFPio8WithBIUOffload … … 631 633 ; We know MODULE_8BIT_IDE is included 632 634 lahf ; Save the PF 633 cmp al, DEVICE_8BIT_XTIDE_REV2 635 cmp al, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 634 636 jbe SHORT .ChangingToXTIDEorXTCF 635 637 sahf ; Restore the PF -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm
r597 r601 92 92 g_szNfoMainFlash: db "Flash loaded BIOS image to EEPROM.",NULL 93 93 g_szNfoMainSave: db "Save BIOS changes back to original file from which it was loaded.",NULL 94 g_szNfoMainLicense: db "XTIDE Universal BIOS and XTIDECFG Copyright (C) 2009-2010 by Tomi Tilli, 2011-201 8by XTIDE Universal BIOS Team."94 g_szNfoMainLicense: db "XTIDE Universal BIOS and XTIDECFG Copyright (C) 2009-2010 by Tomi Tilli, 2011-2019 by XTIDE Universal BIOS Team." 95 95 db " Released under GNU GPL v2, with ABSOLUTELY NO WARRANTY. Press ENTER for more details...",NULL 96 96 g_szNfoMainHomePage: db "Visit http://xtideuniversalbios.org (home page) and http://vcfed.org/forum (support)",NULL 97 97 98 98 g_szHelpMainLicense: db "XTIDE Universal BIOS and XTIDECFG Configuration program are Copyright 2009-2010 by Tomi Tilli," 99 db " 2011-201 8by XTIDE Universal BIOS Team. Released under GNU GPL v2. This software comes with ABSOLUTELY NO WARRANTY."99 db " 2011-2019 by XTIDE Universal BIOS Team. Released under GNU GPL v2. This software comes with ABSOLUTELY NO WARRANTY." 100 100 db " This is free software, and you are welcome to redistribute it under certain conditions." 101 101 db " See the LICENSE.TXT file that was included with this distribution," … … 280 280 db "XTIDE rev 1",LF 281 281 db "XTIDE rev 2 or modded rev 1",LF 282 db "XTIDE rev 2 (Olivetti M24)",LF 282 283 db "XT-CF PIO8",LF 283 284 db "XT-CF PIO8 (BIU offload)",LF … … 293 294 g_szValueCfgDeviceRev1: db "XTIDE r1",NULL 294 295 g_szValueCfgDeviceRev2: db "XTIDE r2",NULL 296 g_szValueCfgDeviceRev2Olivetti: db "XTIDE r2",NULL 295 297 g_szValueCfgDeviceXTCFPio8: db "XTCF PIO",NULL 296 298 g_szValueCfgDeviceXTCFPio8WithBIUOffload: db "BIU 8",NULL … … 381 383 382 384 g_szHelpDrvBlockMode: db "Block Mode will speed up transfers since multiple sectors can be transferred before waiting next data request." 383 db " Normally Block Mode should always be kept enabled but there is at "384 db " least one drive with buggy Block Mode implementation.",NULL385 db " Normally Block Mode should always be kept enabled but there is at least one" 386 db " drive with buggy Block Mode implementation (Quantum ProDrive LPS 340A).",NULL 385 387 386 388 g_szHelpDrvWriteCache: db "Modern Hard Drives have a large amount of internal write cache." … … 420 422 421 423 ; Strings for boot settings menu 422 g_szItemBootTimeout: db "Selection timeout",NULL423 g_szItemBootDrive: db "Default boot drive",NULL424 g_szItemBootDispMode: db "Display Mode",NULL425 g_szItemColorTheme: db "Color Theme",NULL426 g_szItemBootFloppyDrvs: db "Number of Floppy Drives",NULL427 g_szItemSerialDetect: db "Scan for Serial Drives",NULL428 g_szItemClearBdaDriveCount: db 429 430 g_szDlgBootTimeout: db "Enter Boot Menu selection timeout in BIOS timer ticks (2...1092).",NULL431 g_szDlgBootDrive: db "Enter default drive number (0xh for Floppy Drives, 8xh for Hard Disks).",NULL432 g_szDlgBootDispMode: db "Select display mode.",NULL433 g_szDlgColorTheme: db "Select color theme.",NULL434 g_szDlgBootFloppyDrvs: db "Select number of Floppy Drives in system.",NULL435 g_szDlgSerialDetect: db "Scan for serial drives?",NULL436 g_szDlgClearBdaDriveCount: db 437 438 g_szNfoBootTimeout: db "Menu item selection timeout in BIOS timer ticks. 1 tick = 54.9 ms.",NULL439 g_szNfoBootDrive: db "Default boot drive.",NULL440 g_szNfoDispMode: db "Display mode to set when booting.",NULL441 g_szNfoColorTheme: db "Color theme used by the boot menu and the hotkey bar.",NULL442 g_szNfoBootFloppyDrvs: db "Number of Floppy Drives in system.",NULL443 g_szNfoSerialDetect: db "Scans all standard COM ports for serial drives."444 db " This can also be invoked by holding down ALT at the end of normal drive detection.",NULL445 g_szNfoClearBdaDriveCount: db 446 447 g_szHelpBootTimeout: db "Boot Menu selection timeout in BIOS timer ticks (1 second = 18.2 ticks)."448 db " When timer goes to zero, currently selected drive will be booted automatically."449 db " Timeout can be disabled by setting this to 0.",NULL450 g_szHelpBootDrive: db "Drive to be set selected by default when Boot Menu is displayed.",NULL451 g_szHelpColorTheme: db "Pick a theme from a list of several pre-defined themes to customize the colors used by the boot menu and, if"452 db " available, the hotkey bar. Selecting a theme or loading a BIOS, or its settings, from file or from ROM will"453 db " make XTIDECFG apply the theme to itself for easy preview. The ability to preview themes requires that"454 db " XTIDECFG is running in a display mode that can display colors. In other words, you may configure the"455 db " BIOS on a machine with a monochrome graphics adapter and not be able to preview the theme but the BIOS will"456 db " still use the selected theme when installed in a machine with a color graphics adapter.",NULL457 g_szHelpBootFloppyDrvs: db "Detecting the correct number of floppy drives might fail when using a floppy controller with its own BIOS."458 db " A minimum number of floppy drives can be specified to force non-detected drives to appear on boot menu.",NULL459 g_szHelpSerialDetect: db "Set to Yes, at the end of normal drive detection, COM ports 1-7 (in reverse order) will be scanned for a connection"460 db " to a serial drive server. This option provides flexibility with the COM port and baud rate to be used,"461 db " it need not be configured ahead of time, but at the expense of a slower boot process."462 db " Even when this option is set to No, this functionality can still be invoked by holding down the ALT key at the end"463 db " of normal drive detection. Note that if any serial drives are detected during the normal drive detection,"464 db " no scan will take place (to avoid finding the same drive twice).",NULL465 g_szHelpClearBdaDriveCount: db "Set to NO for normal operation. Set to YES to get Windows 95 drivers to work when"466 db "MODULE_WIN95_CMOS_HACK is not included (dummy drive needs to be defined in system BIOS setup).",NULL424 g_szItemBootTimeout: db "Selection timeout",NULL 425 g_szItemBootDrive: db "Default boot drive",NULL 426 g_szItemBootDispMode: db "Display Mode",NULL 427 g_szItemColorTheme: db "Color Theme",NULL 428 g_szItemBootFloppyDrvs: db "Number of Floppy Drives",NULL 429 g_szItemSerialDetect: db "Scan for Serial Drives",NULL 430 g_szItemClearBdaDriveCount: db "Remove other hard drives",NULL 431 432 g_szDlgBootTimeout: db "Enter Boot Menu selection timeout in BIOS timer ticks (2...1092).",NULL 433 g_szDlgBootDrive: db "Enter default drive number (0xh for Floppy Drives, 8xh for Hard Disks).",NULL 434 g_szDlgBootDispMode: db "Select display mode.",NULL 435 g_szDlgColorTheme: db "Select color theme.",NULL 436 g_szDlgBootFloppyDrvs: db "Select number of Floppy Drives in system.",NULL 437 g_szDlgSerialDetect: db "Scan for serial drives?",NULL 438 g_szDlgClearBdaDriveCount: db "Remove existing INT 13h hard drives during drive detection?",NULL 439 440 g_szNfoBootTimeout: db "Menu item selection timeout in BIOS timer ticks. 1 tick = 54.9 ms.",NULL 441 g_szNfoBootDrive: db "Default boot drive.",NULL 442 g_szNfoDispMode: db "Display mode to set when booting.",NULL 443 g_szNfoColorTheme: db "Color theme used by the boot menu and the hotkey bar.",NULL 444 g_szNfoBootFloppyDrvs: db "Number of Floppy Drives in system.",NULL 445 g_szNfoSerialDetect: db "Scans all standard COM ports for serial drives." 446 db " This can also be invoked by holding down ALT at the end of normal drive detection.",NULL 447 g_szNfoClearBdaDriveCount: db "Can be used to remove duplicate hard drives.",NULL 448 449 g_szHelpBootTimeout: db "Boot Menu selection timeout in BIOS timer ticks (1 second = 18.2 ticks)." 450 db " When timer goes to zero, currently selected drive will be booted automatically." 451 db " Timeout can be disabled by setting this to 0.",NULL 452 g_szHelpBootDrive: db "Drive to be set selected by default when Boot Menu is displayed.",NULL 453 g_szHelpColorTheme: db "Pick a theme from a list of several pre-defined themes to customize the colors used by the boot menu and, if" 454 db " available, the hotkey bar. Selecting a theme or loading a BIOS, or its settings, from file or from ROM will" 455 db " make XTIDECFG apply the theme to itself for easy preview. The ability to preview themes requires that" 456 db " XTIDECFG is running in a display mode that can display colors. In other words, you may configure the" 457 db " BIOS on a machine with a monochrome graphics adapter and not be able to preview the theme but the BIOS will" 458 db " still use the selected theme when installed in a machine with a color graphics adapter.",NULL 459 g_szHelpBootFloppyDrvs: db "Detecting the correct number of floppy drives might fail when using a floppy controller with its own BIOS." 460 db " A minimum number of floppy drives can be specified to force non-detected drives to appear on boot menu.",NULL 461 g_szHelpSerialDetect: db "Set to Yes, at the end of normal drive detection, COM ports 1-7 (in reverse order) will be scanned for a connection" 462 db " to a serial drive server. This option provides flexibility with the COM port and baud rate to be used," 463 db " it need not be configured ahead of time, but at the expense of a slower boot process." 464 db " Even when this option is set to No, this functionality can still be invoked by holding down the ALT key at the end" 465 db " of normal drive detection. Note that if any serial drives are detected during the normal drive detection," 466 db " no scan will take place (to avoid finding the same drive twice).",NULL 467 g_szHelpClearBdaDriveCount: db "Set to NO for normal operation. Set to YES to get Windows 95 drivers to work when" 468 db " MODULE_WIN95_CMOS_HACK is not included (dummy drive needs to be defined in system BIOS setup).",NULL 467 469 468 470 g_szMultichoiceBootDispMode: db "Default",LF
Note:
See TracChangeset
for help on using the changeset viewer.