mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Bringing trunk up to status of old "current"
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
;______________________________________________________________________________________________________________________
|
||||
|
||||
@@ -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
|
||||
;______________________________________________________________________________________________________________________
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user