@@ -106,7 +106,7 @@ ARCH_5150 EQU 'P' ; 5150
106106ARCH_5160 EQU 'X' ; 5160 v1
107107ARCH_5160v2 EQU 'Y' ; 5160 v2/3
108108ARCH_TURBO EQU 'T' ; Standard Turbo or clone
109- ARCH_ST12 EQU 'S' ; ST-xx/UNIQUE (TD3300A )
109+ ARCH_TD3300 EQU 'S' ; TD3300A ( ST-xx/UNIQUE/Auva )
110110ARCH_FE2010 EQU 'F' ; Faraday FE2010A
111111ARCH_EHB EQU 'H' ; EMM Computers/Homebrew8088
112112ARCH_EMU EQU 'E' ; 86Box/Emulator
@@ -135,10 +135,10 @@ TURBO_REV EQU 2 ; reversed PPI B (bit 3)
135135;
136136VER_NAME EQU 'GLaBIOS'
137137 IFNDEF VER_NUM
138- VER_NUM EQU '0.2.0 ' ; (max 6 chars)
138+ VER_NUM EQU '0.2.1 ' ; (max 6 chars)
139139 ENDIF
140140 IFNDEF VER_DATE
141- VER_DATE EQU '12/02 /22' ; must be MM/DD/YY format
141+ VER_DATE EQU '12/05 /22' ; must be MM/DD/YY format
142142 ENDIF
143143 IFNDEF COPY_YEAR
144144COPY_YEAR EQU '2022' ; can be set at build time
@@ -160,7 +160,7 @@ VER_BLD EQU '0000'
160160;ARCH_TYPE EQU ARCH_5160 ; PC 5160 (recommended for non-Turbo)
161161;ARCH_TYPE EQU ARCH_5160v2 ; PC 5160v2 (not recommended)
162162ARCH_TYPE EQU ARCH_TURBO ; Standard Turbo
163- ;ARCH_TYPE EQU ARCH_ST12 ; ST-xx/UNIQUE Port 90h
163+ ;ARCH_TYPE EQU ARCH_TD3300 ; TD3300A ( ST-xx/UNIQUE/Auva)
164164;ARCH_TYPE EQU ARCH_FE2010 ; Faraday FE2010A
165165;ARCH_TYPE EQU ARCH_EHB ; EMM Computers/Homebrew 8088
166166;ARCH_TYPE EQU ARCH_EMU ; 86Box/Emulator (will not work
@@ -252,6 +252,7 @@ FD_AUTO_DETECT = 0 ; Auto-detect number of floppy drives
252252 ; use only for DIP switch-less PCs!
253253POST_ERR_WAIT = 1 ; Wait for Any Key press to continue if
254254 ; there is a POST error
255+ INT_19_BOOT_HD = 0 ; Try IPL to floppy then hard drive (80h)
255256
256257;----------------------------------------------------------------------------;
257258; END Configurable Build Options
@@ -290,9 +291,9 @@ TURBO_TYPE = TURBO_NONE ; disable Turbo features
290291TURBO_TYPE = TURBO_NONE ; disable Turbo features
291292 ENDIF
292293
293- IF ARCH_TYPE EQ ARCH_ST12
294+ IF ARCH_TYPE EQ ARCH_TD3300
294295;----------------------------------------------------------------------------;
295- ; Configuration for ST-xx/ 90h board
296+ ; Configuration for TD3300A ( 90h register)
296297;
297298BASIC_ROM = 0 ; disable to free code space
298299FDC_HLT_WAIT = 0 ; seems to cause issues on ST-xx
@@ -346,6 +347,7 @@ FD_AUTO_DETECT = 1 ; auto-detect number of floppy drives
346347TURBO_TYPE = TURBO_NONE ; disable Turbo features
347348POST_ERR_WAIT = 0 ; only warn POST errors (since DMA
348349 ; and FDC are optional)
350+ INT_19_BOOT_HD = 1 ; Try IPL to floppy then HD
349351 ENDIF
350352
351353 IF ARCH_TYPE EQ ARCH_EMU
@@ -581,7 +583,7 @@ ATKB_CMD EQU 64H ; 8042 Keyboard command/status register
581583; POST TEST card I/O
582584POST_CARD_PORT EQU 80H ; can be 60H, 80H, 300H, 313H
583585
584- ; TD3300A/ ST-xx/UNIQUE Control Registers
586+ ; TD3300A ( ST-xx/UNIQUE/Auva) Control Registers (90h)
585587TD_WS EQU 70H ; RAM, I/O wait state control
586588TD_TURBO EQU 90H ; Write 2 for Turbo, 3 for Normal
587589
@@ -2341,7 +2343,7 @@ RESET_PPI:
23412343 MOV AL , PPI_B_BOOT ; KB hold low+disable, NMI on, spkr off
23422344 OUT PPI_B , AL ; send to 8255 Port B
23432345
2344- IF ARCH_TYPE EQ ARCH_ST12
2346+ IF ARCH_TYPE EQ ARCH_TD3300
23452347;----------------------------------------------------------------------------;
23462348; Set up Turbo mode for ST-xx
23472349;
@@ -2352,7 +2354,7 @@ RESET_PPI:
23522354 MOV AL , 0011B
23532355 ENDIF
23542356 OUT TD_TURBO , AL ; write new register
2355- ENDIF ; ENDIF ARCH_ST12
2357+ ENDIF ; ENDIF ARCH_TD3300
23562358
23572359 IF POST_TEST_CHK_ROM EQ 1
23582360;----------------------------------------------------------------------------;
@@ -2912,7 +2914,7 @@ SETTINGS_FE2010:
29122914 OUT PPI_B , AL ; port 61H Control Register
29132915 AND AL , MASK PBTB ; Turbo bit set?
29142916 JZ SETTINGS_FE2010_1 ; jump if not turbo (AH already 0)
2915- MOV AX , DBW <FE_CR < ,,,, 1 , >> ; set default with FPU bit, clear AL
2917+ MOV AX , DBW <FE_CR < ,,,, 1 , >> ; set AH default with FPU bit, clear AL
29162918SETTINGS_FE2010_1:
29172919 OUT PPI_C , AL ; write 0 to port 62H Switch Register
29182920 IN AL , PPI_C ; port 62H Switch Register
@@ -3098,7 +3100,7 @@ TOGGLE_TURBO PROC
30983100 ASSUME DS :_BDA
30993101 CLI ; interrupts off
31003102
3101- IF ARCH_TYPE EQ ARCH_ST12
3103+ IF ARCH_TYPE EQ ARCH_TD3300
31023104;----------------------------------------------------------------------------;
31033105; ST-xx Port 90h Turbo switch
31043106; If port 90 == 1, send 2 (0010b) Normal -> Turbo
@@ -3129,10 +3131,10 @@ TOGGLE_TURBO PROC
31293131 CALL FE2010_SETUP_SAVE ; write to memory and register
31303132 XCHG AX , CX ; restore AX
31313133 ENDIF ; ARCH_FE2010
3132- ENDIF ; ARCH_ST12
3134+ ENDIF ; ARCH_TD3300
31333135
31343136 MOV CX , CURSOR_DEFAULT ; original power-on cursor
3135- IF ARCH_TYPE EQ ARCH_ST12
3137+ IF ARCH_TYPE EQ ARCH_TD3300
31363138 CMP AL , 0011B ; turbo on?
31373139 ELSE
31383140 TEST AL , MASK PBTB ; turbo bit set?
@@ -3208,6 +3210,7 @@ V40_REG_LOOP:
32083210 MOV AL , 0AAH ; Test Controller
32093211 OUT ATKB_CMD , AL ; OUT Command Port (64h)
32103212 IO_DELAY
3213+ IN AL , ATKB_IO ; Read Data Port and discard (60h)
32113214
32123215 MOV AL , 01100000B ; Write Command Byte to Keyboard Controller
32133216 OUT ATKB_CMD , AL ; OUT Command Port (64h)
@@ -3764,16 +3767,29 @@ CLEAR_POST_SCREEN:
37643767;----------------------------------------------------------------------------;
37653768
37663769;----------------------------------------------------------------------------;
3767- ; Attempt to IPL three times from drive 0h. If failure, call INT 18h / ROM BASIC.
3770+ ; Attempt to IPL three times. If failure, call INT 18h / ROM BASIC.
3771+ ; If INT_19_BOOT_HD is 1, BIOS will also attempt to IPL from 80h (C:)
37683772;
3769- CWD ; IPL from drive 0 A: (DL = 0h)
3770- MOV CX , 3 ; retry IPL 3 times
3773+ CWD ; start IPL from drive 0 (A:)
3774+ BOOT_DEVICE:
3775+ MOV CX , 3 ; retry three times
37713776BOOT_RETRY:
37723777 PUSH CX ; save retry counter
3778+ IF INT_19_BOOT_HD EQ 1
3779+ PUSH DX ; save drive number
3780+ ENDIF
37733781 INT 19H
3774- IO_DELAY_LONG
3782+ IO_DELAY_LONG ; delay between attempts
3783+ IF INT_19_BOOT_HD EQ 1
3784+ POP DX ; restore drive number
3785+ ENDIF
37753786 POP CX ; restore retry counter
37763787 LOOP BOOT_RETRY
3788+ IF INT_19_BOOT_HD EQ 1
3789+ XOR DL , 80H ; flip to HD
3790+ JNZ BOOT_DEVICE ; retry if HD, otherwise INT 18
3791+ ENDIF
3792+
37773793TRY_INT_18:
37783794 INT 18H ; Try vectored ROM BASIC or boot failure
37793795 ; INT 18h should never return...
0 commit comments