Bringing trunk up to status of old "current"

This commit is contained in:
wayne
2012-10-23 08:19:24 +00:00
parent 542fcad37e
commit 191f08cc46
117 changed files with 31984 additions and 530 deletions

View File

@@ -12,16 +12,7 @@
; INCLUDE GENERIC STUFF
;
#INCLUDE "std.asm"
;
;==================================================================================================
; BANK 1 ENTRY / JUMP TABLE
;==================================================================================================
;
; THIS IS THE ENTRY DISPATCH POINT FOR BANK1
;__________________________________________________________________________________________________
;
JP INITSYS
JP BIOS_DISPATCH
;
;==================================================================================================
; SYSTEM INITIALIZATION
@@ -87,6 +78,9 @@ INITSYS2:
#IF (HDSKENABLE)
CALL HDSK_INIT
#ENDIF
;
LD DE,STR_BANNER
CALL WRITESTR
;
RET
;
@@ -163,7 +157,7 @@ DIO_DISPATCH:
JR NC,DIO_COMMON
; DISPATCH FUCNTION TO APPROPRIATE DRIVER
AND $0F ;
AND $0F
; HACK TO FILL IN HSTTRK AND HSTSEC
; BUT ONLY FOR READ/WRITE FUNCTION CALLS
@@ -225,8 +219,8 @@ DIO_GBA:
; DISK: SET BUFFER ADDRESS
;
DIO_SBA:
BIT 7,H ; IS HIGH ORDER BIT SET?
CALL Z,PANIC ; IF NOT, ADR IS IN LOWER 32K, NOT ALLOWED!!!
BIT 7,H ; IS HIGH ORDER BIT SET?
CALL Z,PANIC ; IF NOT, ADR IS IN LOWER 32K, NOT ALLOWED!!!
LD (DIOBUF),HL
XOR A
RET
@@ -270,17 +264,17 @@ SYS_BNKCPY:
LD A,C ; BANK SELECTION TO A
PUSH IX
POP BC ; BC = BYTE COUNT TO COPY
JP $FF03 ; JUST PASS CONTROL TO HBIOS STUB IN UPPER MEMORY
JP HB_BNKCPY ; JUST PASS CONTROL TO HBIOS STUB IN UPPER MEMORY
;
; COMMON ROUTINE THAT IS CALLED BY CHARACTER IO DRIVERS WHEN
; AN IDLE CONDITION IS DETECTED (WAIT FOR INPUT/OUTPUT)
;
CIO_IDLE:
LD HL,IDLECOUNT ; POINT TO IDLE COUNT
DEC (HL) ; 256 TIMES?
CALL Z,IDLE ; RUN IDLE PROCESS EVERY 256 ITERATIONS
XOR A ; SIGNAL NO CHAR READY
RET ; AND RETURN
LD HL,IDLECOUNT ; POINT TO IDLE COUNT
DEC (HL) ; 256 TIMES?
CALL Z,IDLE ; RUN IDLE PROCESS EVERY 256 ITERATIONS
XOR A ; SIGNAL NO CHAR READY
RET ; AND RETURN
;
;==================================================================================================
; DEVICE DRIVERS
@@ -371,8 +365,6 @@ SIZ_HDSK .EQU $ - ORG_HDSK
#DEFINE DSKY_KBD
#INCLUDE "util.asm"
;
;;;;#INCLUDE "memmgr.asm"
;
;==================================================================================================
; BANK ONE GLOBAL DATA
;==================================================================================================
@@ -387,6 +379,12 @@ HSTSEC .DW 0 ; SECTOR IN BUFFER
;
DIOBUF .DW $FD00 ; PTR TO 512 BYTE DISK XFR BUFFER
;
STR_BANNER .DB "N8VEM HBIOS v", BIOSVER, " ("
VAR_LOC .DB VARIANT, "-"
TST_LOC .DB TIMESTAMP, ")\r\n"
.DB PLATFORM_NAME, DSKYLBL, VDULBL, FDLBL, IDELBL, PPIDELBL,
.DB SDLBL, PRPLBL, PPPLBL, HDSKLBL, "\r\n$"
;
;==================================================================================================
; FILL REMAINDER OF BANK
;==================================================================================================
@@ -408,23 +406,19 @@ HB_IMG .EQU $
.ORG HB_LOC
;
;==================================================================================================
; HBIOS DISPATCH
; HBIOS INTERRUPT VECTOR TABLE
;==================================================================================================
;
; DISPATCH JUMP TABLE FOR UPPER MEMORY HBIOS FUNCTIONS
; AREA RESERVED FOR UP TO 16 INTERRUPT VECTOR ENTRIES (MODE 2)
;
JP HB_INIT
JP HB_BNKCPY
;
; MEMORY MANAGER
;
#INCLUDE "memmgr.asm"
HB_IVT:
.FILL 20H,0FFH
;
;==================================================================================================
; HBIOS BOOT ROUTINE
; HBIOS INITIALIZATION
;==================================================================================================
;
; SETUP RST 08 TO HANDLE MAIN BIOS FUNCTIONS
; SETUP RST 08 VECTOR TO HANDLE MAIN BIOS FUNCTIONS
;
HB_INIT:
LD A,0C3H ; $C3 = JP
@@ -433,6 +427,10 @@ HB_INIT:
LD (9H),HL
RET
;
; MEMORY MANAGER
;
#INCLUDE "memmgr.asm"
;
;==================================================================================================
; HBIOS BNKCPY ROUTINE
;==================================================================================================
@@ -467,36 +465,34 @@ HB_BNKCPY2:
; ENTRY POINT FOR BIOS FUNCTIONS (TARGET OF RST 08)
;
HB_ENTRY:
LD (STACKSAV),SP ; SAVE ORIGINAL STACK FRAME
LD SP,STACK ; SETUP NEW STACK FRAME
PGRAMF(1) ; MAP RAM PAGE 1 INTO LOWER 32K
CALL 1003H ; CALL BANK 1 HBIOS FUNCTION DISPATCHER
LD (HB_STKSAV),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HB_STACK ; SETUP NEW STACK FRAME
PUSH AF ; SAVE AF (FUNCTION RETURN)
CALL BIOS_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER
PUSH AF ; SAVE AF
PGRAMF(0) ; MAP RAM PAGE 0 INTO LOWER 32K
POP AF ; RESTORE AF
LD SP,(STACKSAV) ; RESTORE ORIGINAL STACK FRAME
LD SP,(HB_STKSAV) ; RESTORE ORIGINAL STACK FRAME
RET ; RETURN TO CALLER
;
; PRIVATE DATA
;
STACKSAV .DW 0
;
; JUST FOR FUN, PRIVATE STACK IS LOCATED AT TOP OF MEMORY...
;
STACK .EQU 0
;
;
HB_STKSAV .DW 0 ; PREVIOUS STACK POINTER (SEE PROXY)
;
HB_SLACK .EQU (HB_END - $)
.ECHO "STACK space remaining: "
.ECHO "HBIOS space remaining: "
.ECHO HB_SLACK
.ECHO " bytes.\n"
;
.FILL HB_SLACK,0FFH
;
.END
;==================================================================================================
; HBIOS STACK LIVES IN THE SLACK SPACE!!!
;==================================================================================================
;
HB_STACK .EQU $ & 0FFFFH
;
.END

View File

@@ -97,11 +97,14 @@ LOOP:
;
; INITIALIZE HBIOS AND JUMP TO LOADER
;
; CALL HBIOS HARDWARE INITIALIZATION
LD A,1 ; SETUP TO SELECT PAGE 1
CALL RAMPG ; SELECT RAM PAGE 1 (WHICH IS NOW LOADED WITH BNK1 CODE)
CALL 1000H ; CALL HBIOS INITIALIZATION
;
; CALL HBIOS PROXY INITIALIZATION
CALL RAMPGZ ; MAKE SURE RAM PAGE ZERO IS MAPPED TO LOWER 32K
CALL 0FF00H ; CALL HBIOS PROXY INITIALIZATION
CALL 0FF20H ; CALL HBIOS PROXY INITIALIZATION
;
JP 8400H ; JUMP TO LOADER
;______________________________________________________________________________________________________________________

View File

@@ -87,11 +87,14 @@ LOOP:
;
; INITIALIZE HBIOS AND JUMP TO LOADER
;
; CALL HBIOS HARDWARE INITIALIZATION
LD A,1 ; SETUP TO SELECT PAGE 1
CALL RAMPG ; SELECT RAM PAGE 1 (WHICH IS NOW LOADED WITH BNK1 CODE)
CALL 1000H ; CALL HBIOS INITIALIZATION
;
; CALL HBIOS PROXY INITIALIZATION
CALL RAMPGZ ; MAKE SURE RAM PAGE ZERO IS MAPPED TO LOWER 32K
CALL 0FF00H ; CALL HBIOS PROXY INITIALIZATION
CALL 0FF20H ; CALL HBIOS PROXY INITIALIZATION
;
JP 8400H ; JUMP TO LOADER
;______________________________________________________________________________________________________________________

View File

@@ -214,7 +214,7 @@ CONIO:
;
LD A,(IOBYTE) ; GET IOBYTE
AND $03 ; ISOLATE RELEVANT IOBYTE BITS FOR CONSOLE
OR $00 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0B
OR $00 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C
JP CIO_DISP
;
;__________________________________________________________________________________________________
@@ -262,7 +262,7 @@ PUNCHIO:
RLCA
RLCA
AND $03 ; ISOLATE RELEVANT IOBYTE BITS FOR PUN:
OR $08 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0B
OR $08 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C
JP CIO_DISP
;
;__________________________________________________________________________________________________
@@ -288,7 +288,7 @@ READERIO:
RRCA ; SHIFT RELEVANT BITS TO BITS 0-1
RRCA
AND $03 ; ISOLATE RELEVANT IOBYTE BITS FOR RDR:
OR $04 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0B
OR $04 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C
JP CIO_DISP
;
;__________________________________________________________________________________________________
@@ -310,8 +310,7 @@ CIOST:
;
OR A ; SET FLAGS
RET Z ; NO CHARACTERS WAITING (IST) OR OUTPUT BUF FULL (OST)
XOR A
DEC A ; $FF SIGNALS READY TO READ (IST) OR WRITE (OST)
OR 0FFH ; $FF SIGNALS READY TO READ (IST) OR WRITE (OST)
RET
;__________________________________________________________________________________________________
SELDSK:
@@ -986,9 +985,7 @@ NUL_OUT:
;
NUL_IST:
NUL_OST:
; LD A,$FF
XOR A ; A=0
DEC A ; A=$FF & NZ SET
OR $FF ; A=$FF & NZ SET
RET
;
;==================================================================================================
@@ -1445,14 +1442,13 @@ STR_SEC .DB " SEC=$"
; DATA
;==================================================================================================
;
STR_BANNER .DB "\r\n", OSLBL, " for ", PLATFORM_NAME, "\r\n"
.DB "CBIOS v", BIOSVER, " ("
STR_BANNER .DB OSLBL, " for ", PLATFORM_NAME, " (CBIOS v", BIOSVER, ")$"
VAR_LOC .DB VARIANT
.DB "-"
TST_LOC .DB TIMESTAMP, ")", DSKYLBL, VDULBL, FDLBL, IDELBL, PPIDELBL, SDLBL, PRPLBL, PPPLBL, "\r\n$"
TST_LOC .DB TIMESTAMP
;
STR_INITRAMDISK .DB "\r\nFormatting RAMDISK...$"
STR_READONLY .DB "\r\nCBIOS Error: Read Only Drive$"
STR_STALE .DB "\r\nCBIOS Error: Stale Drive$"
STR_READONLY .DB "\r\nCBIOS Err: Read Only Drive$"
STR_STALE .DB "\r\nCBIOS Err: Stale Drive$"
;
SECADR: .DW 0 ; ADDRESS OF SECTOR IN ROM/RAM PAGE
DEFDRIVE .DB 0 ; DEFAULT DRIVE
@@ -2048,8 +2044,10 @@ INIT2:
LD (CDISK),A ; SETUP CDISK
; STARTUP MESSAGE
CALL NEWLINE
LD DE,STR_BANNER
CALL WRITESTR
CALL NEWLINE
; SAVE COMMAND PROCESSOR TO CACHE IN RAM1
LD A,1
@@ -2064,6 +2062,8 @@ INIT2:
CALL BLKRES ; RESET DISK (DE)BLOCKING ALGORITHM
CALL MD_INIT ; INITIALIZE MEMORY DISK DRIVER (RAM/ROM)
CALL NEWLINE
; STARTUP CPM
JP GOCPM
;
@@ -2114,6 +2114,7 @@ DEFDRV2:
; WE HAVE A MATCH MATCHED, RECORD NEW DEFAULT DRIVE
LD A,C ; C HAS MATCHING DRIVE, MOVE TO A
LD (DEFDRIVE),A ; SAVE IT
;
RET
;
.FILL (256 - ($ - INIT)),0 ; FILL REMAINDER OF PAGE

View File

@@ -1277,9 +1277,9 @@ INITIALIZE:
;_____________________________________________________________________________
MTERM_INIT:
LD A, 82H
OUT (PIOX),A
OUT (PPIX),A
LD A, 30H ;set PC4,5 to disable PPISD (if used)
OUT (PIOC),A ;won't affect DSKY
OUT (PPIC),A ;won't affect DSKY
RET
;__KB_GET_____________________________________________________________________
@@ -1294,11 +1294,11 @@ KB_GET_LOOP: ; WAIT FOR KEY
CP 00H ; NULL?
JR Z,KB_GET_LOOP ; LOOP WHILE NOT ZERO
LD D,A ; STORE A
LD A,4FH+30H ; SCAN ALL COL LINES
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,4FH | 30H ; SCAN ALL COL LINES
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL KB_SCAN_DELAY ; DELAY TO ALLOW LINES TO STABILIZE
KB_CLEAR_LOOP: ; WAIT FOR KEY TO CLEAR
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KB_CLEAR_LOOP ; YES, EXIT
@@ -1324,43 +1324,43 @@ KB_GET_DONE:
;
KB_SCAN:
LD C,0000H
LD A,41H+30H ; SCAN COL ONE
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,41H | 30H ; SCAN COL ONE
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL KB_SCAN_DELAY ; DELAY TO ALLOW LINES TO STABILIZE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KB_SCAN_FOUND ; YES, EXIT
LD C,0040H
LD A,42H+30H ; SCAN COL TWO
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,42H | 30H ; SCAN COL TWO
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL KB_SCAN_DELAY ; DELAY TO ALLOW LINES TO STABILIZE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KB_SCAN_FOUND ; YES, EXIT
LD C,0080H
LD A,44H+30H ; SCAN COL THREE
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,44H | 30H ; SCAN COL THREE
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL KB_SCAN_DELAY ; DELAY TO ALLOW LINES TO STABILIZE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KB_SCAN_FOUND ; YES, EXIT
LD C,00C0H ;
LD A,48H+30H ; SCAN COL FOUR
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,48H | 30H ; SCAN COL FOUR
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL KB_SCAN_DELAY ; DELAY TO ALLOW LINES TO STABILIZE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KB_SCAN_FOUND ; YES, EXIT
LD A, 40H+30H ; TURN OFF ALL COLUMNS
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A, 40H | 30H ; TURN OFF ALL COLUMNS
OUT (PPIC),A ; SEND TO COLUMN LINES
LD A, 00H ; RETURN NULL
RET ; EXIT
@@ -1368,8 +1368,8 @@ KB_SCAN_FOUND:
AND 3FH ; CLEAR TOP TWO BITS
OR C ; ADD IN ROW BITS
LD C,A ; STORE VALUE
LD A, 00H+30H ; TURN OFF ALL COLUMNS
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A, 00H | 30H ; TURN OFF ALL COLUMNS
OUT (PPIC),A ; SEND TO COLUMN LINES
LD A,C ; RESTORE VALUE
RET
@@ -1400,25 +1400,25 @@ HEXDISPLAY:
LD BC,0007H
ADD HL,BC
LD B,08H ; SET DIGIT COUNT
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
OUT (PIOC),A ; OUTPUT
LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF
OUT (PPIC),A ; OUTPUT
CALL PAUSE ; WAIT
LD A,0F0H ; SET CONTROL TO 1111 (DATA COMING, HEX DECODE,NO DECODE, NORMAL)
OUT (PIOA),A ; OUTPUT TO PORT
LD A,80H+30H ; STROBE WRITE PULSE WITH CONTROL=1
OUT (PIOC),A ; OUTPUT TO PORT
OUT (PPIA),A ; OUTPUT TO PORT
LD A,80H | 30H ; STROBE WRITE PULSE WITH CONTROL=1
OUT (PPIC),A ; OUTPUT TO PORT
CALL PAUSE ; WAIT
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
OUT (PIOC),A ; OUTPUT
LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF
OUT (PPIC),A ; OUTPUT
HEXDISPLAY_LP:
LD A,(HL) ; GET DISPLAY DIGIT
CALL DECODEDISPLAY ; DECODE DISPLAY
OUT (PIOA),A ; OUT TO PIOA
LD A,00H+30H ; SET WRITE STROBE
OUT (PIOC),A ; OUT TO PIOC
OUT (PPIA),A ; OUT TO PPIA
LD A,00H | 30H ; SET WRITE STROBE
OUT (PPIC),A ; OUT TO PPIC
CALL PAUSE ; DELAY
LD A,40H+30H ; SET CONTROL PORT OFF
OUT (PIOC),A ; OUT TO PIOC
LD A,40H | 30H ; SET CONTROL PORT OFF
OUT (PPIC),A ; OUT TO PPIC
CALL PAUSE ; WAIT
DEC HL ; INC POINTER
DJNZ HEXDISPLAY_LP ; LOOP FOR NEXT DIGIT
@@ -1456,24 +1456,24 @@ SEGDISPLAY:
LD BC,0007H
ADD HL,BC
LD B,08H ; SET DIGIT COUNT
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
OUT (PIOC),A ; OUTPUT
LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF
OUT (PPIC),A ; OUTPUT
CALL PAUSE ; WAIT
LD A,0F0H ; SET CONTROL TO 1111 (DATA COMING, HEX DECODE,NO DECODE, NORMAL)
OUT (PIOA),A ; OUTPUT TO PORT
LD A,80H+30H ; STROBE WRITE PULSE WITH CONTROL=1
OUT (PIOC),A ; OUTPUT TO PORT
OUT (PPIA),A ; OUTPUT TO PORT
LD A,80H | 30H ; STROBE WRITE PULSE WITH CONTROL=1
OUT (PPIC),A ; OUTPUT TO PORT
CALL PAUSE ; WAIT
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
OUT (PIOC),A ; OUTPUT
LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF
OUT (PPIC),A ; OUTPUT
SEGDISPLAY_LP:
LD A,(HL) ; GET DISPLAY DIGIT
OUT (PIOA),A ; OUT TO PIOA
LD A,00H+30H ; SET WRITE STROBE
OUT (PIOC),A ; OUT TO PIOC
OUT (PPIA),A ; OUT TO PPIA
LD A,00H | 30H ; SET WRITE STROBE
OUT (PPIC),A ; OUT TO PPIC
CALL PAUSE ; DELAY
LD A,40H+30H ; SET CONTROL PORT OFF
OUT (PIOC),A ; OUT TO PIOC
LD A,40H | 30H ; SET CONTROL PORT OFF
OUT (PPIC),A ; OUT TO PPIC
CALL PAUSE ; WAIT
DEC HL ; INC POINTER
DJNZ SEGDISPLAY_LP ; LOOP FOR NEXT DIGIT

View File

@@ -45,8 +45,8 @@ INIT2:
;
DOBOOTMENU:
LD DE,STR_BANNER
CALL WRITESTR
; LD DE,STR_BANNER
; CALL WRITESTR
CALL LISTDRIVES
LD DE,STR_BOOTMENU
@@ -474,12 +474,6 @@ DB_DONE:
CALL PATBI
CALL RAMPGZ
; ; IF BILOC IS SET, THEN ALSO PATCH BOOT INFO INTO OS IMAGE
; LD HL,(BL_BILOC)
; LD A,H
; OR L
; CALL NZ,PATBI ; PATCH IF BL_BILOC <> 0
; JUMP TO COLD BOOT ENTRY
LD HL,(BL_CPMENT)
JP (HL)
@@ -625,27 +619,27 @@ SEGDISPLAY:
LD BC,0007H
ADD HL,BC
LD B,08H ; SET DIGIT COUNT
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
OUT (PIOC),A ; OUTPUT
LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF
OUT (PPIC),A ; OUTPUT
CALL DELAY ; WAIT
LD A,0F0H ; SET CONTROL TO 1111 (DATA COMING, HEX DECODE,NO DECODE, NORMAL)
SEGDISPLAY1: ;
OUT (PIOA),A ; OUTPUT TO PORT
LD A,80H+30H ; STROBE WRITE PULSE WITH CONTROL=1
OUT (PIOC),A ; OUTPUT TO PORT
OUT (PPIA),A ; OUTPUT TO PORT
LD A,80H | 30H ; STROBE WRITE PULSE WITH CONTROL=1
OUT (PPIC),A ; OUTPUT TO PORT
CALL DELAY ; WAIT
LD A,40H+30H ; SET CONTROL PORT 7218 TO OFF
OUT (PIOC),A ; OUTPUT
LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF
OUT (PPIC),A ; OUTPUT
SEGDISPLAY_LP:
LD A,(HL) ; GET DISPLAY DIGIT
OUT (PIOA),A ; OUT TO PIOA
LD A,00H+30H ; SET WRITE STROBE
OUT (PIOC),A ; OUT TO PIOC
OUT (PPIA),A ; OUT TO PPIA
LD A,00H | 30H ; SET WRITE STROBE
OUT (PPIC),A ; OUT TO PPIC
CALL DELAY ; DELAY
LD A,40H+30H ; SET CONTROL PORT OFF
OUT (PIOC),A ; OUT TO PIOC
LD A,40H | 30H ; SET CONTROL PORT OFF
OUT (PPIC),A ; OUT TO PPIC
CALL DELAY ; WAIT
DEC HL ; INC POINTER
DJNZ SEGDISPLAY_LP ; LOOP FOR NEXT DIGIT
@@ -676,11 +670,8 @@ STR_NODISK .DB "\r\nNo disk!$"
STR_NOBOOT .DB "\r\nDisk not bootable!$"
STR_BOOTERR .DB "\r\nBoot failure!$"
;
STR_BANNER:
.DB "\r\n\r\n", PLATFORM_NAME, " Boot Loader v", BIOSVER
.DB " (", VARIANT, "-", TIMESTAMP, ")\r\n$"
STR_BOOTMENU:
.DB "\r\nBoot: (M)onitor, (R)OM, or Drive Letter ===> $"
STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader$"
STR_BOOTMENU .DB "\r\nBoot: (M)onitor, (R)OM, or Drive Letter ===> $"
;
STR_SETUPMENU:
.DB "\r\n\r\n", PLATFORM_NAME, " Setup & Configuration v", BIOSVER
@@ -724,7 +715,6 @@ CINUC:
;
;__________________________________________________________________________________________________
;
;BL_METABUF .ORG 8000H ; START OF RAM
BL_METABUF .EQU $
BL_SIG .DW 0 ; SIGNATURE (WILL BE 0A55AH IF SET)
BL_PLATFORM .DB 0 ; Formatting Platform
@@ -733,7 +723,6 @@ BL_FORMATTER .FILL 8,0 ; Formatting Program
BL_DRIVE .DB 0 ; Physical Disk Drive #
BL_LU .DW 0 ; Logical Unit (slice)
;
; .ORG (BL_METABUF + 128 - 32)
.FILL (BL_METABUF + 128) - $ - 32
BL_PROTECT .DB 0 ; write protect boolean
BL_UPDATES .DW 0 ; update counter

View File

@@ -24,10 +24,10 @@ IDEMSB .EQU 21H ; MSB
IDECTL .EQU 22H ; CONTROL SIGNALS
PPI1CONT .EQU 23H ; CONTROL BYTE PPI 82C55
#ELSE
IDELSB .EQU PIOA ; LSB
IDEMSB .EQU PIOB ; MSB
IDECTL .EQU PIOC ; CONTROL SIGNALS
PPI1CONT .EQU PIOX ; CONTROL BYTE PPI 82C55
IDELSB .EQU PPIA ; LSB
IDEMSB .EQU PPIB ; MSB
IDECTL .EQU PPIC ; CONTROL SIGNALS
PPI1CONT .EQU PPIX ; CONTROL BYTE PPI 82C55
#ENDIF
;
; PPI control bytes for read and write to IDE drive

View File

@@ -37,38 +37,38 @@ PPP_CMDRESET .EQU $F0 ; SOFT RESET PROPELLER
;
PPP_INIT:
LD A,$9B ; PPI MODE 0, ALL PINS INPUT
OUT (PIOX),A ; SEND IT
OUT (PPIX),A ; SEND IT
LD A,11000010B ; PPI MODE 2 (BI HANDSHAKE), PC0-2 OUT, PB IN
OUT (PIOX),A
OUT (PPIX),A
CALL DELAY ; PROBABLY NOT NEEDED
LD A,00000000B ; SET PC0 -> 0
OUT (PIOX),A
OUT (PPIX),A
LD A,00000010B ; SET PC1 -> 0
OUT (PIOX),A
OUT (PPIX),A
LD A,00000101B ; SET PC2 -> 1 - ASSERT RESET ON PPP
OUT (PIOX),A
OUT (PPIX),A
LD A,00000110B ; SET PC3 -> 0
OUT (PIOX),A
OUT (PPIX),A
CALL DELAY ; PROBABLY NOT NEEDED
IN A,(PIOA) ; CLEAR GARBAGE???
IN A,(PPIA) ; CLEAR GARBAGE???
CALL DELAY ; PROBABLY NOT NEEDED
LD A,00000001B ; SET CMD FLAG
OUT (PIOX),A ; SEND IT
OUT (PPIX),A ; SEND IT
LD E,PPP_CMDRESET
CALL PUTBYTE ; SEND THE COMMAND BYTE
CALL DELAY
LD A,00000000B ; CLEAR CMD FLAG
OUT (PIOX),A
OUT (PPIX),A
LD A,00000100B ; SET PC2 -> 0 - DEASSERT RESET ON PPP
OUT (PIOX),A
OUT (PPIX),A
CALL DELAY ; PROBABLY NOT NEEDED
@@ -79,7 +79,7 @@ INIT1:
CALL DELAY
CALL DELAY
CALL DELAY
IN A,(PIOA)
IN A,(PPIA)
POP BC
CP $AA
RET Z
@@ -426,46 +426,46 @@ PPPSTR_ERR .TEXT "ERR=$"
;==================================================================================================
;
PUTBYTE:
IN A,(PIOC)
IN A,(PPIC)
BIT 7,A
JR Z,PUTBYTE
LD A,E
OUT (PIOA),A
OUT (PPIA),A
RET
;
GETBYTE:
IN A,(PIOC)
IN A,(PPIC)
BIT 5,A
JR Z,GETBYTE
IN A,(PIOA)
IN A,(PPIA)
LD E,A
RET
;
SENDCMD:
IN A,(PIOA) ; DISCARD ANYTHING PENDING
IN A,(PPIA) ; DISCARD ANYTHING PENDING
; WAIT FOR OBF HIGH (OUTPUT BUFFER TO BE EMPTY)
IN A,(PIOC)
IN A,(PPIC)
BIT 7,A
JR Z,SENDCMD
LD A,00000001B ; SET CMD FLAG
OUT (PIOX),A ; SEND IT
OUT (PPIX),A ; SEND IT
SENDCMD0:
IN A,(PIOC)
IN A,(PPIC)
BIT 7,A
JR Z,SENDCMD0
LD A,D
OUT (PIOA),A
OUT (PPIA),A
SENDCMD1:
; WAIT FOR OBF HIGH (BYTE HAS BEEN RECEIVED)
IN A,(PIOC)
IN A,(PPIC)
BIT 7,A
JR Z,SENDCMD1
; TURN OFF CMD
LD A,00000000B ; CLEAR CMD FLAG
OUT (PIOX),A
OUT (PPIX),A
RET
;

View File

@@ -103,9 +103,9 @@ SD_INIT:
OUT (RTC),A
#IF (PPISD)
LD A,82H ; PPI PORT A=OUT, B=IN, C=OUT
OUT (PIOX),A
OUT (PPIX),A
LD A,30H ; PC4,5 /CS HIGH
OUT (PIOC),A
OUT (PPIC),A
#ENDIF
XOR A
DEC A
@@ -135,10 +135,10 @@ SD_SENDCLKS:
#IF (!SDCSIO)
#IF (PPISD)
LD A,03 ;PC1=1, TOGGLE CLOCK
OUT (PIOX),A
OUT (PPIX),A
NOP
LD A,02 ;PC1=0, RESET CLOCK
OUT (PIOX),A
OUT (PPIX),A
#ELSE
OUT (RTC),A
XOR SD_CLK ; TOGGLE CLOCK BIT
@@ -176,7 +176,7 @@ SD_DONE:
#IF (!SDCSIO)
#IF (PPISD)
LD A,30H
OUT (PIOC),A ;PC4=1 /CS INACTIVE
OUT (PPIC),A ;PC4=1 /CS INACTIVE
LD B,16
#ELSE
XOR A
@@ -202,18 +202,18 @@ SD_PUT:
LD C,A ; C=BYTE TO SEND
LD B,8 ; SEND 8 BITS (LOOP 8 TIMES)
LD A,08H ;PC4=0, /CS ACTIVE
OUT (PIOX),A
OUT (PPIX),A
SD_PUT1:
RL C ;ROTATE NEXT BIT FROM C INTO CF
LD A,01 ;PC0=1, DATA OUT=1
JR C,SD_PUT2
LD A,00 ;PC0=0, DATA OUT =0
SD_PUT2:
OUT (PIOX),A ;SEND DATA OUT
OUT (PPIX),A ;SEND DATA OUT
LD A,03 ;PC1=1, TOGGLE CLOCK
OUT (PIOX),A
OUT (PPIX),A
LD A,02 ;PC1=0, RESET CLOCK
OUT (PIOX),A
OUT (PPIX),A
DJNZ SD_PUT1 ;REPEAT FOR ALL 8 BITS
RET
#ELSE
@@ -255,13 +255,13 @@ SD_GET:
#IF (PPISD)
LD B,8 ; RECEIVE 8 BITS (LOOP 8 TIMES)
SD_GET1:
IN A,(PIOB) ; GET BIT FROM SD-CARD
IN A,(PPIB) ; GET BIT FROM SD-CARD
RLA ; ROTATE PB7 INTO CARRY
RL C ; ROTATE CARRY INTO C
LD A,03 ; PC1=1, TOGGLE CLOCK
OUT (PIOX),A
OUT (PPIX),A
LD A,02 ; PC1=0, RESET CLOCK
OUT (PIOX),A
OUT (PPIX),A
DJNZ SD_GET1 ; REPEAT FOR ALL 8 BITS
LD A,C ; GET BYTE RECEIVED INTO A
; CALL PRTHEXBYTE ; *DEBUG*
@@ -323,7 +323,7 @@ MIRROR2:
SD_WAITRDY:
#IF (PPISD)
LD A,21H ;/CS ACTIVE (PC4), DOUT=1 (PC0)
OUT (PIOC),A
OUT (PPIC),A
#ELSE
IN A,(RTC)
#IF (!SDCSIO)
@@ -519,9 +519,9 @@ SD_GOIDLE:
SD_INITCARD:
#IF (PPISD)
LD A,82H ; PPI PORT A=OUT, B=IN, C=OUT
OUT (PIOX),A
OUT (PPIX),A
LD A,30H ; PC4,5 /CS HIGH
OUT (PIOC),A
OUT (PPIC),A
#ENDIF
LD A,20H ; PUT RTC LATCH TO IDLE
OUT (RTC),A
@@ -537,7 +537,7 @@ SD_INITCARD:
#IF (!SDCSIO)
#IF (PPISD)
LD A,21H ; /CS=0, DOUT=1, CLK=0
OUT (PIOC),A
OUT (PPIC),A
LD B,07FH ; 127 CLOCKS (255 TRANSITIONS STARTING WITH LO)
#ELSE
LD A,SD_CS | SD_DOUT ; CS=HI, DOUT=HI

View File

@@ -179,12 +179,12 @@ RTC .EQU 70H ; ADDRESS OF RTC LATCH AND INPUT PORT
;__HARDWARE_INTERFACES________________________________________________________________________________________________________________
;
; PIO 82C55 I/O IS DECODED TO PORT 60-67
; PPI 82C55 I/O IS DECODED TO PORT 60-67
;
PIOA .EQU 60H ; PORT A
PIOB .EQU 61H ; PORT B
PIOC .EQU 62H ; PORT C
PIOX .EQU 63H ; PIO CONTROL PORT
PPIA .EQU 60H ; PORT A
PPIB .EQU 61H ; PORT B
PPIC .EQU 62H ; PORT C
PPIX .EQU 63H ; PPI CONTROL PORT
;
; 16C550 SERIAL LINE UART
;
@@ -279,17 +279,17 @@ CPU_ICR: .EQU $3F ;I/O control register (not relocated!!!)
;
N8_IOBASE .EQU $80
;
PIO .EQU N8_IOBASE+$00
PIOA .EQU PIO+$00 ; PORT A
PIOB .EQU PIO+$01 ; PORT B
PIOC .EQU PIO+$02 ; PORT C
PIOX .EQU PIO+$03 ; PIO CONTROL PORT
PPI .EQU N8_IOBASE+$00
PPIA .EQU PPI+$00 ; PORT A
PPIB .EQU PPI+$01 ; PORT B
PPIC .EQU PPI+$02 ; PORT C
PPIX .EQU PPI+$03 ; PPI CONTROL PORT
;
PIO2 .EQU N8_IOBASE+$04
PIO2A .EQU PIO2+$00 ; PORT A
PIO2B .EQU PIO2+$01 ; PORT B
PIO2C .EQU PIO2+$02 ; PORT C
PIO2X .EQU PIO2+$03 ; PIO CONTROL PORT
PPI2 .EQU N8_IOBASE+$04
PPI2A .EQU PPI2+$00 ; PORT A
PPI2B .EQU PPI2+$01 ; PORT B
PPI2C .EQU PPI2+$02 ; PORT C
PPI2X .EQU PPI2+$03 ; PPI CONTROL PORT
;
RTC: .EQU N8_IOBASE+$08 ;RTC latch and buffer
;FDC: .EQU N8_IOBASE+$0C ;Floppy disk controller
@@ -530,6 +530,12 @@ CCPSIZ: .EQU 00800H
#DEFINE SDLBL ""
#ENDIF
#IF (HDSKENABLE)
#DEFINE HDSKLBL ", SIMH DISK"
#ELSE
#DEFINE HDSKLBL ""
#ENDIF
#IF (PRPENABLE)
#IF (PRPCONENABLE & PRPSDENABLE)
#DEFINE PRPLBL ", PROPIO (CONSOLE, SD CARD)"

View File

@@ -422,9 +422,9 @@ KY_BO .EQU 017H ; BOOT
;
DSKY_INIT:
LD A,82H
OUT (PIOX),A
OUT (PPIX),A
LD A,30H ;disable /CS on PPISD card(s)
OUT (PIOC),A
OUT (PPIC),A
XOR A
LD (KY_BUF),A
RET
@@ -487,43 +487,43 @@ KY_GET_DONE:
;
KY_SCAN:
LD C,0000H
LD A,41H+30H ; SCAN COL ONE
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,41H | 30H ; SCAN COL ONE
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL DELAY ; DEBOUNCE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KY_SCAN_FOUND ; YES, EXIT
LD C,0040H
LD A,42H+30H ; SCAN COL TWO
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,42H | 30H ; SCAN COL TWO
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL DELAY ; DEBOUNCE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KY_SCAN_FOUND ; YES, EXIT
LD C,0080H
LD A,44H+30H ; SCAN COL THREE
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,44H | 30H ; SCAN COL THREE
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL DELAY ; DEBOUNCE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KY_SCAN_FOUND ; YES, EXIT
LD C,00C0H ;
LD A,48H+30H ; SCAN COL FOUR
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,48H | 30H ; SCAN COL FOUR
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL DELAY ; DEBOUNCE
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KY_SCAN_FOUND ; YES, EXIT
LD A,040H+30H ; TURN OFF ALL COLUMNS
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,040H | 30H ; TURN OFF ALL COLUMNS
OUT (PPIC),A ; SEND TO COLUMN LINES
LD A,00H ; RETURN NULL
RET ; EXIT
@@ -533,17 +533,17 @@ KY_SCAN_FOUND:
LD C,A ; STORE VALUE
; WAIT FOR KEY TO BE RELEASED
LD A,4FH+30H ; SCAN ALL COL LINES
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,4FH | 30H ; SCAN ALL COL LINES
OUT (PPIC),A ; SEND TO COLUMN LINES
CALL DELAY ; DEBOUNCE
KY_CLEAR_LOOP: ; WAIT FOR KEY TO CLEAR
IN A,(PIOB) ; GET ROWS
IN A,(PPIB) ; GET ROWS
AND 7FH ;ignore PB7 for PPISD
CP 00H ; ANYTHING PRESSED?
JR NZ,KY_CLEAR_LOOP ; YES, LOOP UNTIL KEY RELEASED
LD A,040H+30H ; TURN OFF ALL COLUMNS
OUT (PIOC),A ; SEND TO COLUMN LINES
LD A,040H | 30H ; TURN OFF ALL COLUMNS
OUT (PPIC),A ; SEND TO COLUMN LINES
LD A,C ; RESTORE VALUE
RET
@@ -583,15 +583,15 @@ DSKY_HEXOUT1:
DJNZ DSKY_HEXOUT1
LD A,82H ; SETUP PPI
OUT (PIOX),A
OUT (PPIX),A
CALL DSKY_COFF
LD A,0D0H ; 7218 -> (DATA COMING, HEXA DECODE)
OUT (PIOA),A
OUT (PPIA),A
CALL DSKY_STROBEC
LD HL,DSKY_BUF ; POINT TO START OF BUF
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
LD C,PIOA
LD C,PPIA
DSKY_HEXOUT2:
OUTI
JP Z,DSKY_STROBE ; DO FINAL STROBE AND RETURN
@@ -599,18 +599,18 @@ DSKY_HEXOUT2:
JR DSKY_HEXOUT2
DSKY_STROBEC:
LD A,80H+30H
LD A,80H | 30H
JP DSKY_STROBE0
DSKY_STROBE:
LD A,00H+30H ; SET WRITE STROBE
LD A,00H | 30H ; SET WRITE STROBE
DSKY_STROBE0:
OUT (PIOC),A ; OUT TO PORTC
OUT (PPIC),A ; OUT TO PORTC
CALL DELAY ; DELAY
DSKY_COFF
LD A,40H+30H ; SET CONTROL PORT OFF
OUT (PIOC),A ; OUT TO PORTC
LD A,40H | 30H ; SET CONTROL PORT OFF
OUT (PPIC),A ; OUT TO PORTC
CALL DELAY ; WAIT
RET
#ENDIF

View File

@@ -15,10 +15,10 @@ READR .EQU 0F0h ; READ VDU
WRITR .EQU 0F1h ; WRITE VDU
SY6545S .EQU 0F2h ; VDU STATUS/REGISTER
SY6545D .EQU 0F3h ;
PPIA .EQU 0F4h ; PPI PORT A
PPIB .EQU 0F5h ; PPI PORT B
PPIC .EQU 0F6h ; PPI PORT C
PPICONT .EQU 0F7h ; PPI CONTROL PORT
VPPIA .EQU 0F4h ; PPI PORT A
VPPIB .EQU 0F5h ; PPI PORT B
VPPIC .EQU 0F6h ; PPI PORT C
VPPICONT .EQU 0F7h ; PPI CONTROL PORT
STATE_NORMAL .EQU 00H ; NORMAL TERMINAL OPS
STATE_ESC .EQU 01H ; ESC MODE
@@ -774,7 +774,36 @@ VDU_UPDATECHECK:
VDU_INIT6845:
; DB 07FH, 50H, 60H, 7CH, 19H, 1FH, 19H, 1AH, 78H, 09H, 60H, 09H, 00H, 00H, 00H, 00H
.DB 07Fh, 50h, 60h, 0Ch, 1Eh, 02h, 18h, 1Ch, 78h, 09h, 60h, 09h, 00h, 00h, 00h, 00h
; CCIR 625/50 VERSION (USED IN MOST OF THE WORLD)
; JUMPER K1 2-3, K2 1-2 FOR 2MHz CHAR CLOCK
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC)
.DB 050H ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED (80 COLUMNS)
.DB 060H ; R2 HORIZONTAL SYNC POSITION
.DB 00CH ; R3 SYNC WIDTHS
.DB 01EH ; R4 VERTICAL TOTAL (TOTAL CHARS IN A FRAME -1)
.DB 002H ; R5 VERTICAL TOTAL ADJUST (
.DB 018H ; R6 VERTICAL DISPLAYED (24 ROWS)
.DB 01CH ; R7 VERTICAL SYNC
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING
; B6=1 PIN 34 IS UPDATE STROBE
; B5=1 DELAY CURSOR 1 CHARACTER
; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER
; B3=1 TRANSPARENT MEMORY ADDRESSING
; B2=0 RAM STRAIGHT BINARY ADDRESSING
; B1,B0=0 NON-INTERLACE
.DB 009H ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
.DB 060H ; R10 CURSOR START RASTER
.DB 009H ; R11 CURSOR END RASTER
.DB 00H ; R12 START ADDRESS HI
.DB 00H ; R13 START ADDRESS LO
.DB 00H ; R14 CURSOR ADDRESS HI
.DB 00H ; R15 CURSOR ADDRESS LO
; THE CCIR 625/50 TELEVISION STANDARD HAS 625 LINES INTERLACED AT 50 FIELDS PER SECOND. THIS WORKS
; OUT AS 50 FIELDS OF 312.5 LINES PER SECOND NON-INTERLACED AS USED HERE.
; HORIZONTAL LINE WIDTH IS 64uS. FOR A 2 MHz CHARACTER CLOCK (R0+1)/2000000 = 64uS
; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5.
; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG)
;__VDU_CRTINIT_____________________________________________________________________________________
@@ -943,11 +972,11 @@ VDU_PUTCHAR1: ;
;PR_OUTCHAR:
; PUSH AF ; STORE AF
;PR_OUTCHAR_LOOP:
; IN A,(PPIB) ; GET STATUS INFO
; IN A,(VPPIB) ; GET STATUS INFO
; AND 10000000B ; ONLY INTERESTED IN BUSY FLAG
; JP NZ,PR_OUTCHAR_LOOP ; LOOP IF BUSY
; POP AF ; RESTORE AF
; OUT (PPIA),A ; OUTPUT DATA TO PORT
; OUT (VPPIA),A ; OUTPUT DATA TO PORT
; LD A,1 ; 01 SECOND DELAY
; CALL KB_DELAY ; IGNORE ANYTHING BACK AFTER A RESET
; CALL KB_PORTCBIT0LOW ; STROBE
@@ -1020,9 +1049,9 @@ SF4: DJNZ SF4 ; FINISH UP DELAY
;__________________________________________________________________________________________________
KB_SETPORTC:
LD A,10000010B ; A=OUT B=IN, C HIGH=OUT, CLOW=OUT
OUT (PPICONT),A ; PPI CONTROL PORT
OUT (VPPICONT),A ; PPI CONTROL PORT
LD A,00000000B ; PORT A TO ZERO AS NEED THIS FOR COMMS TO WORK
OUT (PPIA),A ; PPI PORT A
OUT (VPPIA),A ; PPI PORT A
CALL KB_DATAHIGH ;
CALL KB_CLOCKHIGH ;
LD A,0 ;
@@ -1074,7 +1103,7 @@ KB_CLOCKLOW: ;
PORTCBIT5LOW: ;
LD A,01111010B ;
KB_SETBITS: ;
OUT (PPICONT),A ;
OUT (VPPICONT),A ;
RET ;
@@ -1088,7 +1117,7 @@ KB_SETBITS: ;
;__________________________________________________________________________________________________
KB_WAITCLOCKLOW:
LD B,255 ; FOR TIMEOUT COUNTER
WL1: IN A,(PPIB) ; GET A BYTE FROM PORT B
WL1: IN A,(VPPIB) ; GET A BYTE FROM PORT B
BIT 1,A ; TEST THE CLOCK BIT
RET Z ; EXIT IF IT WENT LOW
DJNZ WL1 ; LOOP B TIMES
@@ -1104,7 +1133,7 @@ WL1: IN A,(PPIB) ; GET A BYTE FROM PORT B
;__________________________________________________________________________________________________
KB_WAITCLOCKHIGH:
LD B,255 ; FOR TIMEOUT COUNTER
WH1: IN A,(PPIB) ; GET A BYTE FROM PORT B
WH1: IN A,(VPPIB) ; GET A BYTE FROM PORT B
BIT 1,A ; TEST THE CLOCK BIT
RET NZ ; EXIT IF IT WENT HIGH
DJNZ WH1 ; LOOP B TIMES
@@ -1433,7 +1462,7 @@ WB2: PUSH AF ; STORE THE VALUE IN A
; RETURNS A=0 IF NO DATA, A= SCANCODE (OR PART THEREOF)
;__________________________________________________________________________________________________
KB_READBITS:
IN A,(PPIB)
IN A,(VPPIB)
BIT 1,A ; TEST THE CLOCK BIT
JR Z,R1 ; IF LOW THEN START THE CAPTURE
LD A,0 ; RETURNS A=0 IF NOTHING
@@ -1443,7 +1472,7 @@ R1: CALL KB_WAITCLOCKHIGH; IF GETS TO HERE THEN MUST BE LOW SO WAIT TILL HIGH
LD E,0 ; START WITH E=0
R2: LD D,B ; STORE BECAUSE WAITCLOCKHIGH DESTROYS
CALL KB_WAITCLOCKLOW ; WAIT TILL CLOCK GOES LOW
IN A,(PPIB) ; SAMPLE THE DATA LINE
IN A,(VPPIB) ; SAMPLE THE DATA LINE
RRA ; MOVE THE DATA BIT INTO THE CARRY REGISTER
LD A,E ; GET THE BYTE WE ARE BUILDING IN E
RRA ; MOVE THE CARRY BIT INTO BIT 7 AND SHIFT RIGHT

View File

@@ -1,6 +1,6 @@
#DEFINE RMJ 2
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "2.1.1"
#DEFINE RMN 2
#DEFINE RUP 0
#DEFINE RTP 1
#DEFINE BIOSVER "2.2 B1"
#DEFINE REVISION 1741