mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Revised Emulation Services
This commit is contained in:
@@ -137,7 +137,7 @@ CBXSIZ .EQU $ - CBX
|
||||
; ==============
|
||||
;
|
||||
; Device LST: PUN: RDR: CON:
|
||||
; Bit position 7 6 5 4 3 2 1 0
|
||||
; Bit positions 7 6 5 4 3 2 1 0
|
||||
;
|
||||
; Dec Binary
|
||||
;
|
||||
@@ -343,25 +343,12 @@ GOCPM:
|
||||
LD HL,SECBUF ; ADDRESS OF PHYSICAL SECTOR BUFFER
|
||||
LD (DSKBUF),HL ; SAVE IT IN DSKBUF FOR LATER
|
||||
#ELSE
|
||||
;; CALL BF_DIOSETBUF WITH A PARM OF ZERO TO CAUSE IT TO RESET
|
||||
;; THE PHYSICAL DISK BUFFER TO THE DEFAULT LOCATION PRE-ALLOCATED
|
||||
;; INSIDE OF THE HBIOS BANK. THE ADDRESS IS RETURNED IN HL AND SAVED.
|
||||
;LD B,BF_DIOSETBUF ; GET DISK BUFFER ADR IN HBIOS DRIVER BANK
|
||||
;LD HL,0
|
||||
;RST 08 ; MAKE HBIOS CALL
|
||||
;LD (DSKBUF),HL ; RECORD THE BUFFER ADDRESS
|
||||
|
||||
; ALLOCATE A SINGLE SECTOR DISK BUFFER ON THE HBIOS HEAP
|
||||
LD B,BF_SYSALLOC ; BIOS FUNC: ALLOCATE HEAP MEMORY
|
||||
LD HL,512 ; 1 SECTOR, 512 BYTES
|
||||
RST 08 ; DO IT
|
||||
CALL NZ,PANIC ; HANDLE ERROR
|
||||
LD (DSKBUF),HL ; RECORD THE BUFFER ADDRESS
|
||||
|
||||
; TEMPORARY!!! LET HBIOS KNOW THE DISK BUFFER
|
||||
LD B,BF_DIOSETBUF
|
||||
RST 08
|
||||
|
||||
#ENDIF
|
||||
;
|
||||
LD A,$C3 ; LOAD A WITH 'JP' INSTRUCTION (USED BELOW)
|
||||
@@ -470,7 +457,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:=$0C
|
||||
;OR $00 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C
|
||||
JR CIO_DISP
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
@@ -488,7 +475,7 @@ LISTST:
|
||||
;
|
||||
LD B,BF_CIOOST ; B = FUNCTION
|
||||
LD HL,CIOST ; HL = ADDRESS OF COMPLETION ROUTINE
|
||||
; JR LISTIO ; COMMENTED OUT, FALL THROUGH OK
|
||||
;JR LISTIO ; COMMENTED OUT, FALL THROUGH OK
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
LISTIO:
|
||||
@@ -507,7 +494,7 @@ PUNCH:
|
||||
LD B,BF_CIOOUT ; B = FUNCTION
|
||||
POP HL ; NO COMPLETION ROUTINE, SETUP DIRECT RETURN TO CALLER
|
||||
LD E,C ; E = CHARACTER TO SEND
|
||||
; JR PUNCHIO ; COMMENTED OUT, FALL THROUGH OK
|
||||
;JR PUNCHIO ; COMMENTED OUT, FALL THROUGH OK
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
PUNCHIO:
|
||||
@@ -771,7 +758,6 @@ BLKRW:
|
||||
|
||||
; FIX!!! WE ABORT ON FIRST ERROR, DRI SEEMS TO PASS ERROR STATUS TO THE END!!!
|
||||
|
||||
;CALL TSTPT ; *DEBUG*
|
||||
; IF WRITE OPERATION, GO TO SPECIAL WRITE PROCESSING
|
||||
LD A,(DSKOP) ; GET REQUESTED OPERATION
|
||||
CP DOP_WRITE ; WRITE
|
||||
@@ -857,7 +843,6 @@ BLKRW4:
|
||||
RET ; ERROR RETURN
|
||||
|
||||
BLKRW6:
|
||||
;CALL TSTPT ; *DEBUG*
|
||||
; CHECK TYPE OF OPERATIONS, IF WRITE, THEN GO TO WRITE PROCESSING
|
||||
LD A,(DSKOP) ; GET PENDING OPERATION
|
||||
CP DOP_WRITE ; IS IT A WRITE?
|
||||
@@ -865,7 +850,6 @@ BLKRW6:
|
||||
|
||||
; THIS IS A READ OPERATION, WE ALREADY DID THE I/O, NOW JUST DEBLOCK AND RETURN
|
||||
CALL BLK_DEBLOCK ; EXTRACT DATA FROM BLOCK
|
||||
;CALL TSTPT ; *DEBUG*
|
||||
XOR A ; NO ERROR
|
||||
RET ; ALL DONE
|
||||
|
||||
@@ -1206,8 +1190,10 @@ DSK_SELECT:
|
||||
; DETERMINE MEDIA IN DRIVE
|
||||
LD A,(SEKUNIT) ; GET UNIT
|
||||
LD C,A ; STORE IN C
|
||||
LD B,BF_DIOMED ; DRIVER FUNCTION = DISK MEDIA
|
||||
RST 08
|
||||
LD B,BF_DIOMEDIA ; DRIVER FUNCTION = DISK MEDIA
|
||||
LD E,1 ; ENABLE MEDIA CHECK/DISCOVERY
|
||||
RST 08 ; DO IT
|
||||
LD A,E ; RESULTANT MEDIA ID TO ACCUM
|
||||
OR A ; SET FLAGS
|
||||
LD HL,0 ; ASSUME FAILURE
|
||||
RET Z ; BAIL OUT IF NO MEDIA
|
||||
@@ -1249,7 +1235,7 @@ DSK_STATUS:
|
||||
|
||||
; VALID DRIVE, DISPATCH TO DRIVER
|
||||
LD C,D ; C := UNIT
|
||||
LD B,BF_DIOST ; B := FUNCTION: STATUS
|
||||
LD B,BF_DIOSTATUS ; B := FUNCTION: STATUS
|
||||
RST 08
|
||||
RET
|
||||
#ENDIF
|
||||
@@ -1258,14 +1244,14 @@ DSK_STATUS:
|
||||
;
|
||||
DSK_READ:
|
||||
; SET B = FUNCTION: READ
|
||||
LD B,BF_DIORD
|
||||
LD B,BF_DIOREAD
|
||||
JR DSK_IO
|
||||
;
|
||||
;
|
||||
;
|
||||
DSK_WRITE:
|
||||
; SET B = FUNCTION: WRITE
|
||||
LD B,BF_DIOWR
|
||||
LD B,BF_DIOWRITE
|
||||
JR DSK_IO
|
||||
;
|
||||
;
|
||||
@@ -1325,10 +1311,8 @@ CHS:
|
||||
LD A,(HSTUNIT) ; GET UNIT
|
||||
LD C,A ; UNIT -> C
|
||||
PUSH BC ; SAVE FUNC/UNIT
|
||||
LD B,BF_DIOGETINF ; HBIOS FUNC: UNIT INFO
|
||||
;CALL TSTPT ; *DEBUG*
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; GET UNIT INFO, DEVICE TYPE IN D
|
||||
;CALL TSTPT ; *DEBUG*
|
||||
POP BC ; GET FUNC/UNIT BACK TO BC
|
||||
LD A,D ; DEVICE TYPE -> A
|
||||
AND $F0 ; ISOLATE HIGH BITS
|
||||
@@ -1371,15 +1355,19 @@ CHS2:
|
||||
LD DE,(HSTOFF) ; NOW GET SLICE OFFSET | TO CHSHD,
|
||||
ADD HL,DE ; ADD IT TO TRACK VALUE | NO SLICES
|
||||
POP DE ; RECOVER HEAD/SECTOR + FOR FLOPPY
|
||||
EX DE,HL ; HL <-> DE FOR HBIOS CALL
|
||||
;
|
||||
; MAKE HBIOS CALL
|
||||
; HBIOS FUNC SHOULD STILL BE IN B
|
||||
; UNIT SHOULD STILL BE IN C
|
||||
;
|
||||
;CALL TSTPT ; *DEBUG*
|
||||
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT
|
||||
LD B,BF_DIOSEEK ; SETUP FOR NEW SEEK CALL
|
||||
RST 08 ; DO IT
|
||||
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT
|
||||
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A
|
||||
LD HL,(DSKBUF) ; GET BUFFER ADDRESS
|
||||
LD DE,1 ; TRANSFER ONE SECTOR
|
||||
RST 08 ; DO IT
|
||||
;CALL TSTPT ; *DEBUG*
|
||||
OR A ; SET FLAGS
|
||||
RET ; DONE
|
||||
|
||||
@@ -1829,14 +1817,14 @@ INIT:
|
||||
|
||||
; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB)
|
||||
; FOR USE DURING INIT
|
||||
LD B,BF_SYSXCPY ; HBIOS FUNC: SYSTEM EXTENDED COPY
|
||||
LD DE,(BNKBIOS) ; D = DEST (USER BANK), E = SOURCE (BIOS BANK)
|
||||
RST 08 ; SET BANKS FOR INTERBANK COPY
|
||||
LD B,BF_SYSCPY ; HBIOS FUNC: SYSTEM COPY
|
||||
LD HL,HCB_LOC ; COPY FROM FIXED LOCATION IN HB BANK
|
||||
LD DE,HCB ; TO TEMP LOCATION IN USR BANK
|
||||
LD IX,HCB_SIZ ; COPY CONTENTS OF HCB
|
||||
RST 08 ; DO IT
|
||||
LD B,BF_SYSXCPY ; HBIOS FUNC: SYSTEM EXTENDED COPY
|
||||
LD DE,(BNKBIOS) ; D = DEST (USER BANK), E = SOURCE (BIOS BANK)
|
||||
RST 08 ; SET BANKS FOR INTERBANK COPY
|
||||
LD B,BF_SYSCPY ; HBIOS FUNC: SYSTEM COPY
|
||||
LD HL,HCB_LOC ; COPY FROM FIXED LOCATION IN HB BANK
|
||||
LD DE,HCB ; TO TEMP LOCATION IN USR BANK
|
||||
LD IX,HCB_SIZ ; COPY CONTENTS OF HCB
|
||||
RST 08 ; DO IT
|
||||
|
||||
; CAPTURE RAM DRIVE STARTING BANK
|
||||
LD A,(HCB + HCB_BIDRAMD0)
|
||||
@@ -1966,62 +1954,81 @@ DEV_INIT:
|
||||
;
|
||||
; PATCH IN CRT: DEVICE
|
||||
LD A,(HCB + HCB_CRTDEV) ; GET CONSOLE DEVICE
|
||||
CP CIODEV_NUL ; NUL MEANS NO CRT DEVICE
|
||||
JR Z,DEV_INIT1 ; IF SO, LEAVE IT ALONE
|
||||
CP $FF ; NUL MEANS NO CRT DEVICE
|
||||
JR Z,DEV_INIT00 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 1),A ; CONSOLE CRT
|
||||
LD (DEVMAP + 13),A ; LIST CRT
|
||||
;
|
||||
#IFDEF PLTWBW
|
||||
; UPDATE IOBYTE IF CRT DEVICE IS ACTIVE
|
||||
LD A,(HCB + HCB_CRTDEV) ; GET CRT DEVICE
|
||||
LD B,A ; SAVE IN B
|
||||
LD A,(HCB + HCB_CONDEV) ; GET CONSOLE DEVICE
|
||||
CP B ; COMPARE
|
||||
JR NZ,DEV_INIT1 ; IF DIFFERENT (CRT NOT ACTIVE), LEAVE IOBYTE ALONE
|
||||
JR NZ,DEV_INIT00 ; IF DIFFERENT (CRT NOT ACTIVE), LEAVE IOBYTE ALONE
|
||||
LD A,1 ; IF SAME (CRT ACTIVE), SET IOBYTE FOR CON: = CRT:
|
||||
LD (IOBYTE),A ; STORE IN IOBYTE
|
||||
#ENDIF
|
||||
;
|
||||
DEV_INIT00:
|
||||
; LOOP THRU DEVICES ADDING NON-CRT DEVICES TO DEVMAP
|
||||
LD B,BF_SYSGET ; HBIOS FUNC: GET SYS INFO
|
||||
LD C,BF_SYSGET_CIOCNT ; SUBFUNC: GET CIO UNIT COUNT
|
||||
RST 08 ; E := SERIAL UNIT COUNT
|
||||
LD B,E ; COUNT TO B
|
||||
LD C,0 ; UNIT INDEX
|
||||
LD HL,DEV_INIT1 ; POINTER FOR FIRST ENTRY FOUND
|
||||
DEV_INIT0:
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
PUSH HL ; SAVE TARGET
|
||||
LD B,BF_CIODEVICE ; HBIOS FUNC: GET DEVICE INFO
|
||||
RST 08 ; D := DEVICE TYPE, E := PHYSICAL UNIT NUMBER
|
||||
POP HL ; RESTORE TARGET
|
||||
LD A,D ; DEVICE TYPE TO A
|
||||
CP CIODEV_VDU ; COMPARE TO FIRST VIDEO DEVICE
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
LD A,C ; UNIT INDEX TO ACCUM
|
||||
;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU
|
||||
CALL JPHL ; DO FOR ANY CHARACTER DEVICE TYPE
|
||||
INC C ; NEXT UNIT
|
||||
DJNZ DEV_INIT0 ; LOOP TILL DONE
|
||||
RET ; ALL DONE
|
||||
;
|
||||
DEV_INIT1:
|
||||
; PATCH IN COM0: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 0) ; COM0:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT2 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 0),A ; CONSOLE TTY
|
||||
LD (DEVMAP + 4),A ; READER TTY
|
||||
LD (DEVMAP + 8),A ; PUNCH TTY
|
||||
LD (DEVMAP + 12),A ; LIST TTY
|
||||
LD HL,DEV_INIT2 ; HL := CODE FOR NEXT DEVICE
|
||||
RET
|
||||
;
|
||||
DEV_INIT2:
|
||||
; PATCH IN COM1: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 1) ; COM1:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT3 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 3),A ; CONSOLE UC1
|
||||
LD (DEVMAP + 5),A ; READER PTR
|
||||
LD (DEVMAP + 9),A ; PUNCH PTP
|
||||
LD HL,DEV_INIT3 ; HL := CODE FOR NEXT DEVICE
|
||||
RET
|
||||
;
|
||||
DEV_INIT3:
|
||||
; PATCH IN COM2: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 2) ; COM2:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT4 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 6),A ; READER UR1
|
||||
LD (DEVMAP + 10),A ; PUNCH PT1
|
||||
LD HL,DEV_INIT4 ; HL := CODE FOR NEXT DEVICE
|
||||
RET
|
||||
;
|
||||
DEV_INIT4:
|
||||
; PATCH IN COM3: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 3) ; COM3:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT5 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 7),A ; READER UR2
|
||||
LD (DEVMAP + 11),A ; PUNCH PT2
|
||||
;
|
||||
DEV_INIT5:
|
||||
;
|
||||
LD HL,DEV_INIT5 ; HL := CODE FOR NEXT DEVICE
|
||||
RET
|
||||
;
|
||||
DEV_INIT5:
|
||||
RET ; FAILSAFE IN CASE MORE THAN 4 COM DEVICES
|
||||
;
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
@@ -2317,8 +2324,10 @@ DRV_INIT:
|
||||
LD (HEAPTOP),HL ; AND AS NEW HEAP TOP
|
||||
;
|
||||
; SETUP TO LOOP THROUGH AVAILABLE DEVICES
|
||||
LD B,BF_DIOGETCNT ; HBIOS FUNC: DEVICE COUNT
|
||||
RST 08 ; CALL HBIOS, DEVICE COUNT TO B
|
||||
LD B,BF_SYSGET
|
||||
LD C,BF_SYSGET_DIOCNT
|
||||
RST 08 ; E := DISK UNIT COUNT
|
||||
LD B,E ; COUNT TO B
|
||||
LD A,B ; COUNT TO A
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; HANDLE ZERO DEVICES (ALBEIT POORLY)
|
||||
@@ -2339,7 +2348,7 @@ DRV_INIT2:
|
||||
;
|
||||
DRV_INIT3:
|
||||
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
|
||||
LD B,BF_DIOGETINF ; HBIOS FUNC: UNIT INFO
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS, UNIT TO C
|
||||
LD A,D ; DEVICE TYPE TO A
|
||||
POP DE ; RESTORE DE
|
||||
@@ -2363,13 +2372,15 @@ DRV_INIT5:
|
||||
LD (HDSPV),A ; SAVE IT
|
||||
;
|
||||
; SETUP TO ENUMERATE DEVICES TO BUILD DRVMAP
|
||||
LD B,BF_DIOGETCNT ; HBIOS FUNC: DEVICE COUNT
|
||||
RST 08 ; CALL HBIOS, DEVICE COUNT TO B
|
||||
LD B,BF_SYSGET
|
||||
LD C,BF_SYSGET_DIOCNT
|
||||
RST 08 ; E := DISK UNIT COUNT
|
||||
LD B,E ; COUNT TO B
|
||||
LD C,0 ; USE C AS DEVICE LIST INDEX
|
||||
;
|
||||
DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
|
||||
PUSH BC ; PRESERVE LOOP CONTROL
|
||||
LD B,BF_DIOGETINF ; HBIOS FUNC: DEVICE INFO
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS, D := DEVICE TYPE
|
||||
POP BC ; GET UNIT INDEX BACK IN C
|
||||
PUSH BC ; RESAVE LOOP CONTROL
|
||||
@@ -2547,27 +2558,10 @@ MAKDPH0: ; HANDLE RAM/ROM
|
||||
;
|
||||
#ELSE
|
||||
;
|
||||
;; DETERMINE APPROPRIATE DPB
|
||||
;LD DE,DPB_ROM ; ASSUME ROM
|
||||
;CP DIODEV_MD+0 ; ROM?
|
||||
;JR Z,MAKDPH1 ; YES, JUMP AHEAD
|
||||
;LD DE,DPB_RAM ; ASSUME ROM
|
||||
;CP DIODEV_MD+1 ; ROM?
|
||||
;JR Z,MAKDPH1 ; YES, JUMP AHEAD
|
||||
;AND $F0 ; IGNORE UNIT NIBBLE NOW
|
||||
;LD DE,DPB_FD144 ; ASSUME FLOPPY
|
||||
;CP DIODEV_FD ; FLOPPY?
|
||||
;JR Z,MAKDPH1 ; YES, JUMP AHEAD
|
||||
;LD DE,DPB_RF ; ASSUME RAM FLOPPY
|
||||
;CP DIODEV_RF ; RAM FLOPPY?
|
||||
;JR Z,MAKDPH1 ; YES, JUMP AHEAD
|
||||
;LD DE,DPB_HD ; EVERYTHING ELSE IS ASSUMED TO BE HARD DISK
|
||||
;JR MAKDPH1 ; JUMP AHEAD
|
||||
|
||||
; DETERMINE APPROPRIATE DPB (UNIT NUMBER IN A)
|
||||
; GET DEVICE INFO
|
||||
LD C,A ; UNIT NUMBER TO C
|
||||
LD B,BF_DIOGETINF ; HBIOS FUNC: UNIT INFO
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS, RET W/ DEVICE TYPE IN D, PHYSICAL UNIT IN E
|
||||
LD A,D ; DEVICE TYPE TO A
|
||||
CP DIODEV_MD ; RAM/ROM DISK?
|
||||
@@ -2753,7 +2747,7 @@ DEVUNK .DB "UNK$"
|
||||
PUSH BC ; PRESERVE BC
|
||||
PUSH DE ; PRESERVE DE
|
||||
PUSH HL ; PRESERVE HL
|
||||
LD B,BF_DIOGETINF ; GET DISK INFO
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
LD C,D ; UNIT TO C
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,D ; RESULTANT DEVICE TYPE
|
||||
|
||||
@@ -121,13 +121,23 @@ PANIC:
|
||||
LD DE,STR_PANIC
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
JR REGDMP ; DUMP REGISTERS AND RETURN
|
||||
CALL _REGDMP ; DUMP REGISTERS
|
||||
CALL CONTINUE ; CHECK W/ USER
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
REGDMP:
|
||||
CALL _REGDMP
|
||||
RET
|
||||
;
|
||||
_REGDMP:
|
||||
EX (SP),HL ; RET ADR TO HL, SAVE HL ON TOS
|
||||
LD (REGDMP_PC),HL ; SAVE RET IS PC REG VALUE, SAVE IT
|
||||
LD (REGDMP_RET),HL ; SAVE RETURN ADDRESS
|
||||
POP HL ; RESTORE HL AND BURN STACK ENTRY
|
||||
|
||||
EX (SP),HL ; PC TO HL, SAVE HL ON TOS
|
||||
LD (REGDMP_PC),HL ; SAVE PC VALUE
|
||||
EX (SP),HL ; BACK THE WAY IT WAS
|
||||
|
||||
LD (UTSTKSAV),SP ; SAVE ORIGINAL STACK POINTER
|
||||
@@ -178,7 +188,9 @@ REGDMP:
|
||||
POP AF
|
||||
|
||||
LD SP,(UTSTKSAV) ; BACK TO ORIGINAL STACK FRAME
|
||||
RET
|
||||
|
||||
JP $FFFF ; RETURN, $FFFF IS DYNAMICALLY UPDATED
|
||||
REGDMP_RET .EQU $-2 ; RETURN ADDRESS GOES HERE
|
||||
;
|
||||
REGDMP_PC .DW 0
|
||||
;
|
||||
|
||||
274
Source/HBIOS/API.txt
Normal file
274
Source/HBIOS/API.txt
Normal file
@@ -0,0 +1,274 @@
|
||||
==========================
|
||||
HBIOS Management Functions
|
||||
==========================
|
||||
|
||||
GET ($05):
|
||||
BC=Function/Subfunction A=Result
|
||||
|
||||
Subfunctions:
|
||||
|
||||
CIOCNT ($00):
|
||||
BC=Function/Subfunction A=Result
|
||||
E=Serial Unit Count
|
||||
|
||||
DIOCNT ($10):
|
||||
BC=Function/Subfunction A=Result
|
||||
E=Disk Unit Count
|
||||
|
||||
BIOSVER ($F0):
|
||||
BC=Function/Subfunction A=Result
|
||||
DE=BIOS Version
|
||||
L=Platform
|
||||
|
||||
SET ($06):
|
||||
BC=Function/Subfunction A=Result
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
================
|
||||
Serial Functions
|
||||
================
|
||||
|
||||
IN ($00):
|
||||
BC=Function/Unit A=Result
|
||||
E=Byte Input
|
||||
|
||||
Wait for a single character to be available at the specified device and return the character in E. Function
|
||||
will wait indefinitely for a character to be available.
|
||||
|
||||
OUT ($01):
|
||||
BC=Function/Unit A=Result
|
||||
E=Character to Output
|
||||
|
||||
Wait for device/unit to be ready to send a character, then send the character specified in E.
|
||||
|
||||
IST ($02):
|
||||
BC=Function/Unit A=Result
|
||||
*E=# Bytes Pending
|
||||
|
||||
OST ($03):
|
||||
BC=Function/Unit A=Result
|
||||
*E=# Buffer Bytes Available
|
||||
|
||||
INIT ($04):
|
||||
BC=Function/Unit A=Result
|
||||
DE=Line Characteristics
|
||||
|
||||
QUERY ($05)
|
||||
BC=Function/Unit A=Result
|
||||
DE=Line Characteristics
|
||||
|
||||
DEVICE ($06):
|
||||
BC=Function/Unit A=Result
|
||||
D=Device Type
|
||||
E=Physical Unit
|
||||
|
||||
==============
|
||||
Disk Functions
|
||||
==============
|
||||
|
||||
STATUS ($10):
|
||||
BC=Function/Unit A=Result
|
||||
|
||||
Return current status result code of specified unit. Does not clear
|
||||
the status.
|
||||
|
||||
RESET ($11):
|
||||
BC=Function/Unit A=Result
|
||||
|
||||
Reset the physical interface associated with the specified unit. Flag all units
|
||||
associated with the interface for unit initialization at next I/O call. Clear
|
||||
media identified unless locked. Reset result code of all associated units.
|
||||
|
||||
SEEK ($12):
|
||||
BC=Function/Unit A=Result
|
||||
D:7=Address Type (0=CHS, 1=LBA)
|
||||
CHS: D:0-6=Head,E=Sector,HL=Track
|
||||
LBA: DE:HL
|
||||
|
||||
Update target CHS or LBA for next I/O request on designated unit.
|
||||
Physical seek is typically deferred until subsequent I/O operation.
|
||||
|
||||
READ ($13) / WRITE ($14) / VERIFY ($15):
|
||||
BC=Function/Unit A=Result
|
||||
HL=Buffer Address
|
||||
E=Block Count
|
||||
|
||||
Read, write, or verify sectors starting at current target sector. Current
|
||||
target sector is incremented on each successful operation. On error,
|
||||
target sector is sector where error occurred.
|
||||
|
||||
FORMAT ($16):
|
||||
BC=Function/Unit A=Result
|
||||
CHS: D=Head, HL=Cylinder
|
||||
E=Fill Byte
|
||||
|
||||
Format the designated track using the current media_id. Many devices
|
||||
do not support a true format operation. If so, format should write
|
||||
sectors with designated fill byte.
|
||||
|
||||
*** Need to specify interleave/sector id's somehow.
|
||||
|
||||
DEVICE ($17)
|
||||
BC=Function/Unit A=Result
|
||||
D=Device Type
|
||||
E=Physical Unit
|
||||
|
||||
Report the device type (Floppy, IDE, SD, etc.) and physical unit number. Call
|
||||
does not perform any I/O and succeeds even if the device is in an error state.
|
||||
It does not reset the unit status.
|
||||
|
||||
MEDIA ($18):
|
||||
BC=Function/Unit A=Result
|
||||
E0:=Enable Media Discovery E=Media ID (legacy)
|
||||
|
||||
Report the media definition for media in specified unit. If bit 0 of E is
|
||||
set, then perform media discovery or verification. If no media in device,
|
||||
return no media error.
|
||||
|
||||
DEFMED ($19):
|
||||
BC=Function/Unit A=Result
|
||||
E=Media ID (legacy)
|
||||
|
||||
Define media in unit.
|
||||
|
||||
CAPACITY ($1A):
|
||||
BC=Function/Unit DE:HL=Blocks on Device
|
||||
BC=Block Size
|
||||
A=Result
|
||||
|
||||
Return device capacity information.
|
||||
If media is unknown, return error (no media)
|
||||
|
||||
GEOMETRY ($1B):
|
||||
BC=Function/Unit HL=Cylinders
|
||||
D:0-6=Heads
|
||||
D:7=LBA Capable
|
||||
E=Sectors
|
||||
BC=Block Size
|
||||
A=Result
|
||||
|
||||
Return device geometry information.
|
||||
If media is unknown, return error (no media)
|
||||
|
||||
INFO ($1F):
|
||||
BC=Function/Sub-function A=Result
|
||||
|
||||
C=0: Report total unit count in system:
|
||||
BC=Function/Sub-function A=Result
|
||||
B=Count
|
||||
|
||||
|
||||
|
||||
A: RAM0 B: ROM0 C:
|
||||
|
||||
|
||||
|
||||
Unit Device Board Part Slice Cap
|
||||
------- ------- ------- ------- ------- -------
|
||||
#0 RAM MK4 384K
|
||||
#1 ROM MK4 384K
|
||||
#2 FD0 DIO3 3.5" DS/HD
|
||||
#3 IDE0 DIO3 0 8M
|
||||
|
||||
|
||||
|
||||
Unit 0: RAMDISK on MK4 (384K)
|
||||
Unit 1: ROMDISK on MK4 (384K)
|
||||
Unit 2: FD0 on DISKIO3 (3.5")
|
||||
Unit 3: FD1 on DISKIO3 (5.25")
|
||||
Unit 4: IDE0 on DISKIO3 (4096M)
|
||||
|
||||
A: RAM0 MK4 RAM Disk, 384K
|
||||
B: ROM0 MK4 ROM Disk, 384K
|
||||
C: FD0 DiskIO3 Floppy Disk 0, 3.5" DS/HD
|
||||
D: FD1 DiskIO3 Floppy Disk 1, 5.25" DS/DD
|
||||
E: IDE0:0 MK4 IDE Hard Disk 0, Slice 0, 8M
|
||||
F: IDE0:1 MK4 IDE Hard Disk 0, Slice 1, 8M
|
||||
G: PRPSD0:0 PropIO SD Card, Slice 0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
0: RAM- RAMdrive on the Z180 SBC Mark IV board
|
||||
LBASupported UserAddressableSectors 832
|
||||
|
||||
1: ROM- ROMdrive on the Z180 SBC Mark IV board
|
||||
LBASupported UserAddressableSectors 768
|
||||
|
||||
2: IDE- SanDisk SDCFHSNJC-004G
|
||||
s/n: DMZ031215013440 fmw: HDX 7.08
|
||||
CHS: 7751:16:63 nSectors 7813008 MaxBlkTransfer 1
|
||||
LBASupported UserAddressableSectors 7813120
|
||||
|
||||
3: IDE- SanDisk SDCFHSNJC-004G
|
||||
s/n: BKZ031215015432 fmw: HDX 7.08
|
||||
CHS: 7751:16:63 nSectors 7813008 MaxBlkTransfer 1
|
||||
LBASupported UserAddressableSectors 7813120
|
||||
|
||||
4: SD- SD SU02G
|
||||
s/n: 139401536 fmw: 8.0 d/c: 2013-07
|
||||
LBASupported UserAddressableSectors 1931264
|
||||
|
||||
Boot UNA unit number or ROM? [R,X,0..4] (R):
|
||||
|
||||
N8VEM UNA CP/M (Will Sowerbutts, 2014-08-01 git cbed09)
|
||||
|
||||
Unit Disk Driver Capacity Slices Start LBA Flags
|
||||
0 RAM0 Memory 416.0KB 1 0x00000000 (formatted)
|
||||
1 ROM0 Memory 384.0KB 1 0x00000000
|
||||
2 IDE0 Dual-IDE 3.7GB 469 0x00000000 MBR FGN
|
||||
3 IDE1 Dual-IDE 3.7GB 469 0x00000000 MBR FGN
|
||||
4 SD0 CSIO-SD 943.0MB 0 0x00000000 MBR FGN
|
||||
|
||||
Drive A: assigned to RAM0 slice 0
|
||||
Drive B: assigned to ROM0 slice 0
|
||||
Drive C: assigned to IDE0 slice 0
|
||||
Drive D: assigned to IDE1 slice 0
|
||||
|
||||
Loading Residual CP/M at 0xE100 ... done.
|
||||
CP/M 2.2 Copyright 1979 (c) by Digital Research
|
||||
|
||||
---
|
||||
|
||||
<VDA>_INIT:
|
||||
- ADD OURSELVES TO VDA_TBL
|
||||
- ADD OURSELVES TO CIO_TBL & RECORD <VDA>_CIOUNIT
|
||||
- INIT HARDWARE
|
||||
- GOTO <VDA>_INI
|
||||
|
||||
<VDA>_INI:
|
||||
- CALL <VDA>_RES
|
||||
- INITIALIZE EMULATION BY CALLING EMU_INIT (PASS IN C=EMU_TYPE & DE=VDA_DISPATCH ADDRESS)
|
||||
- EMU_INIT RETURNS ADDRESS OF CIO DISPATCHER ADDRESS FOR SUBSEQUENT FORWARDING
|
||||
- RECORD EMULATORS CIO DISPATCHER ADDRESS IN <VDA>_CIODISPATCH
|
||||
|
||||
<VDA>_RES:
|
||||
- RESET HARDWARE
|
||||
|
||||
EMU_INIT:
|
||||
- CALL <EMU>_INIT BASED ON VALUE IN C
|
||||
|
||||
<EMU>_INIT:
|
||||
- RECORD DE IN VDA_DISPADR
|
||||
- INITIALIZE/RESET EMULATION ENGINE
|
||||
- RETURN EMULATOR CIO DISPATCH ADDRESS IN DE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--------------------------
|
||||
md
|
||||
hdsk
|
||||
rf
|
||||
ide
|
||||
sd
|
||||
ppide
|
||||
fd
|
||||
prp
|
||||
ppp
|
||||
114
Source/HBIOS/Layout.txt
Normal file
114
Source/HBIOS/Layout.txt
Normal file
@@ -0,0 +1,114 @@
|
||||
------------------
|
||||
Final Output Files
|
||||
------------------
|
||||
|
||||
ROM Output File [512K] -> <config>.rom
|
||||
setup [32K] romboot?
|
||||
hbios+hbfill [32K]
|
||||
OSIMG [32K]
|
||||
OSIMG [32K] (used as filler)
|
||||
romdisk - [384K]
|
||||
|
||||
COM Output File -> <config>.com
|
||||
comldr [varies] appboot?
|
||||
hbios [varies]
|
||||
OSIMG [32K]
|
||||
|
||||
IMG Output File -> <config>.img
|
||||
imgldr [varies] imgboot?
|
||||
hbios [varies]
|
||||
OSIMG [32K]
|
||||
|
||||
-------------------------
|
||||
Intermediate Output Files
|
||||
-------------------------
|
||||
|
||||
OSIMG [32K] -> osimg.bin
|
||||
romldr [4K] osldr?
|
||||
dbgmon [4K] tbasic?
|
||||
CPM (ccp/bdos/cbios) [12K]
|
||||
ZSYS (zcpr/zsdos/cbios) [12K]
|
||||
|
||||
CPM [12K] -> cpm.bin
|
||||
ccp [2K]
|
||||
bdos [3.5K]
|
||||
cbios [6.5K]
|
||||
|
||||
ZSYS [12K] -> zsys.bin
|
||||
zcpr [2K]
|
||||
zsdos [3.5K]
|
||||
cbios [6.5K]
|
||||
|
||||
-----------------
|
||||
Compilation Units
|
||||
-----------------
|
||||
|
||||
setup.asm -> setup.bin: romboot?
|
||||
std.asm
|
||||
ver.inc
|
||||
hbios.inc
|
||||
build.inc
|
||||
<config>.asm
|
||||
plt_<platform>.inc
|
||||
hbios.exp
|
||||
loader boot?
|
||||
xio
|
||||
memmgr
|
||||
|
||||
comldr.asm -> comldr.bin: appboot?
|
||||
std.asm
|
||||
ver.inc
|
||||
hbios.inc
|
||||
build.inc
|
||||
<config>.asm
|
||||
plt_<platform>.inc
|
||||
hbios.exp
|
||||
loader boot?
|
||||
xio
|
||||
memmgr
|
||||
|
||||
imgldr.asm -> imgldr.bin: imgboot?
|
||||
std.asm
|
||||
ver.inc
|
||||
hbios.inc
|
||||
build.inc
|
||||
<config>.asm
|
||||
plt_<platform>.inc
|
||||
hbios.exp
|
||||
loader boot?
|
||||
xio
|
||||
memmgr
|
||||
|
||||
hbios.bin:
|
||||
std.asm
|
||||
ver.inc
|
||||
hbios.inc
|
||||
build.inc
|
||||
<config>.asm
|
||||
plt_<platform>.inc
|
||||
<device drivers>
|
||||
util.asm
|
||||
time.asm
|
||||
bcd.asm
|
||||
dsky.asm
|
||||
|
||||
romldr.asm -> romldr.bin: loader?
|
||||
std.asm
|
||||
ver.inc
|
||||
hbios.inc
|
||||
build.inc
|
||||
<config>.asm
|
||||
plt_<platform>.inc
|
||||
util.asm
|
||||
dsky.asm
|
||||
|
||||
dbgmon.asm -> dbgmon.bin:
|
||||
std.asm
|
||||
ver.inc
|
||||
hbios.inc
|
||||
build.inc
|
||||
<config>.asm
|
||||
plt_<platform>.inc
|
||||
util.asm
|
||||
memmgr.asm
|
||||
dsky.asm
|
||||
@@ -19,13 +19,55 @@ ANSI_DEFCOLOR .EQU 7 ; WHITE ON BLACK
|
||||
;==================================================================================================
|
||||
;
|
||||
ANSI_INIT:
|
||||
PRTS("ANSI: RESET$")
|
||||
; SAVE INCOMING VDA DISPATCH ADDRESS
|
||||
CALL TSTPT ; *DEBUG*
|
||||
LD (EMU_VDADISPADR),DE ; RECORD NEW VDA DISPATCH ADDRESS
|
||||
;
|
||||
JP ANSI_INI ; REUSE THE INI FUNCTION BELOW
|
||||
; QUERY THE VIDEO DRIVER FOR SCREEN DIMENSIONS
|
||||
LD B,BF_VDAQRY ; FUNCTION IS QUERY
|
||||
LD HL,0 ; WE DO NOT WANT A COPY OF THE CHARACTER BITMAP DATA
|
||||
CALL TSTPT ; *DEBUG*
|
||||
CALL EMU_VDADISP ; PERFORM THE QUERY FUNCTION
|
||||
CALL TSTPT ; *DEBUG*
|
||||
LD (ANSI_DIM),DE ; SAVE THE SCREEN DIMENSIONS RETURNED
|
||||
;
|
||||
; INITIALIZE ALL WORKING VARIABLES
|
||||
LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0
|
||||
LD (ANSI_POS),DE ; SAVE CURSOR POSITION
|
||||
LD HL,ANSI_STBASE ; SET STATE TO BASE
|
||||
LD (ANSI_STATE),HL ; DO IT
|
||||
LD A,ANSI_DEFATTR ; DEFAULT ATTRIBUTE
|
||||
LD (ANSI_ATTR),A ; CLEAR ATTRIBUTES
|
||||
LD A,ANSI_DEFCOLOR ; DEFAULT COLOR
|
||||
LD (ANSI_COLOR),A ; RESET COLOR
|
||||
XOR A ; ZERO ACCUM
|
||||
LD (ANSI_WRAP),A ; CLEAR WRAP FLAG
|
||||
LD (ANSI_LNM),A ; SET LINE FEED NEW LINE MODE
|
||||
LD (ANSI_CKM),A ; CLEAR DEC CURSOR KEY MODE
|
||||
LD (ANSI_COLM),A ; CLEAR 132 COLUMN MODE
|
||||
LD (ANSI_QLEN),A ; ZERO THE QUEUE LENGTH
|
||||
LD A,$FF ; SET ALL BITS OF ACCUM
|
||||
LD (ANSI_AWM),A ; SET DEC AUTOWRAP MODE
|
||||
;
|
||||
; RESET TAB STOPS TO DEFAULT (EVERY 8 CHARACTERS)
|
||||
LD A,%10000000 ; STOP AT FIRST OF EVERY 8 CHARACTERS
|
||||
LD HL,ANSI_TABS ; POINT TO TAB STOP BITMAP
|
||||
LD B,32 ; INIT 32 BYTES
|
||||
;
|
||||
ANSI_INIT2: ; LOOP TO RESET TAB STOPS
|
||||
LD (HL),A ; SET A BYTE
|
||||
INC HL ; POINT TO NEXT BYTE
|
||||
DJNZ ANSI_INIT2 ; LOOP TILL ALL BYTES DONE
|
||||
;
|
||||
LD DE,ANSI_DISPATCH ; RETURN OUR DISPATCH ADDRESS
|
||||
CALL TSTPT ; *DEBUG*
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_DISPATCH:
|
||||
LD (ANSI_CIODEV),A ; *DEBUG*
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,ANSI_IN ; $30
|
||||
@@ -36,11 +78,11 @@ ANSI_DISPATCH:
|
||||
DEC A
|
||||
JR Z,ANSI_OST ; $33
|
||||
DEC A
|
||||
JR Z,ANSI_CFG ; $34
|
||||
CP 8
|
||||
JP Z,ANSI_INI ; $38
|
||||
CP 9
|
||||
JP Z,ANSI_QRY ; $39
|
||||
JR Z,ANSI_INITDEV ; $34
|
||||
DEC A
|
||||
JP Z,ANSI_QUERY ; $35
|
||||
DEC A
|
||||
JP Z,ANSI_DEVICE ; $36
|
||||
CALL PANIC
|
||||
;
|
||||
;==================================================================================================
|
||||
@@ -141,56 +183,25 @@ ANSI_OST: ; VIDEO OUTPUT IS *ALWAYS* READY
|
||||
INC A ; A := $FF TO SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
;
|
||||
; SET CONFIGURATION
|
||||
;
|
||||
ANSI_CFG:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; INITIALIZE
|
||||
;
|
||||
ANSI_INI:
|
||||
; QUERY THE VIDEO DRIVER FOR SCREEN DIMENSIONS
|
||||
LD B,BF_VDAQRY ; FUNCTION IS QUERY
|
||||
LD HL,0 ; WE DO NOT WANT A COPY OF THE CHARACTER BITMAP DATA
|
||||
CALL EMU_VDADISP ; PERFORM THE QUERY FUNCTION
|
||||
LD (ANSI_DIM),DE ; SAVE THE SCREEN DIMENSIONS RETURNED
|
||||
;
|
||||
; INITIALIZE ALL WORKING VARIABLES
|
||||
LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0
|
||||
LD (ANSI_POS),DE ; SAVE CURSOR POSITION
|
||||
LD HL,ANSI_STBASE ; SET STATE TO BASE
|
||||
LD (ANSI_STATE),HL ; DO IT
|
||||
LD A,ANSI_DEFATTR ; DEFAULT ATTRIBUTE
|
||||
LD (ANSI_ATTR),A ; CLEAR ATTRIBUTES
|
||||
LD A,ANSI_DEFCOLOR ; DEFAULT COLOR
|
||||
LD (ANSI_COLOR),A ; RESET COLOR
|
||||
XOR A ; ZERO ACCUM
|
||||
LD (ANSI_WRAP),A ; CLEAR WRAP FLAG
|
||||
LD (ANSI_LNM),A ; SET LINE FEED NEW LINE MODE
|
||||
LD (ANSI_CKM),A ; CLEAR DEC CURSOR KEY MODE
|
||||
LD (ANSI_COLM),A ; CLEAR 132 COLUMN MODE
|
||||
LD (ANSI_QLEN),A ; ZERO THE QUEUE LENGTH
|
||||
LD A,$FF ; SET ALL BITS OF ACCUM
|
||||
LD (ANSI_AWM),A ; SET DEC AUTOWRAP MODE
|
||||
;
|
||||
; RESET TAB STOPS TO DEFAULT (EVERY 8 CHARACTERS)
|
||||
LD A,%10000000 ; STOP AT FIRST OF EVERY 8 CHARACTERS
|
||||
LD HL,ANSI_TABS ; POINT TO TAB STOP BITMAP
|
||||
LD B,32 ; INIT 32 BYTES
|
||||
;
|
||||
ANSI_INI1: ; LOOP TO RESET TAB STOPS
|
||||
LD (HL),A ; SET A BYTE
|
||||
INC HL ; POINT TO NEXT BYTE
|
||||
DJNZ ANSI_INI1 ; LOOP TILL ALL BYTES DONE
|
||||
;
|
||||
; RESET THE CURRENT VIDEO DRIVER
|
||||
LD B,BF_VDARES ; SET FUNCTION TO RESET
|
||||
JP EMU_VDADISP ; RESET VDA AND RETURN
|
||||
ANSI_INITDEV:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; QUERY STATUS
|
||||
;
|
||||
ANSI_QRY:
|
||||
ANSI_QUERY:
|
||||
CALL PANIC ; NOT IMPLEMENTED
|
||||
RET
|
||||
;
|
||||
; REPORT DEVICE
|
||||
;
|
||||
ANSI_DEVICE:
|
||||
;LD D,CIODEV_VDA ; D := DEVICE TYPE
|
||||
LD A,(ANSI_CIODEV) ; GET THE CURRENT CIO DEVICE *DEBUG*
|
||||
LD D,A ; AND PASS BACK IN D *DEBUG*
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
@@ -318,7 +329,7 @@ ANSI_ESCDISP1: ; NORMAL ESCAPE DISPATCHING, NO INT CHARACTER
|
||||
;
|
||||
ANSI_ESCDISP1A: ; CONTINUE NORMAL ESCAPE SEQ DISPATCHING
|
||||
CP 'c' ; RIS: RESET TO INITIAL STATE
|
||||
JP Z,ANSI_INI ; DO A FULL RESET
|
||||
JP Z,ANSI_INITDEV ; DO A FULL RESET
|
||||
JP ANSI_UNK ; UNKNOWN, ABORT
|
||||
;
|
||||
ANSI_ESCDISP2: ; ESC DISPATCHING FOR '#' INT CHAR
|
||||
@@ -1355,3 +1366,5 @@ ANSI_FINAL .DB 0 ; FINAL CHARACTER RECORDED HERE
|
||||
ANSI_PARIDX .DB 0 ; NUMBER OF PARAMETERS RECORDED
|
||||
ANSI_PARLST .FILL 16,0 ; PARAMETER VALUE LIST (UP TO 16 BYTE VALUES)
|
||||
ANSI_VARLEN .EQU $ - ANSI_VARS
|
||||
;
|
||||
ANSI_CIODEV .DB 0 ; *DEBUG*
|
||||
|
||||
@@ -81,6 +81,70 @@ ASCI_LKUPCNT .EQU ($ - ASCI_LKUP) / 3
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI_INIT:
|
||||
;
|
||||
; SETUP THE DISPATCH TABLE ENTRIES
|
||||
;
|
||||
LD B,2 ; ALWAYS 2 ASCI UNITS ON Z180
|
||||
LD C,0 ; PHYSICAL UNIT INDEX
|
||||
ASCI_INIT0:
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
LD B,C ; PHYSICAL UNIT
|
||||
LD C,CIODEV_ASCI ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, BC IS NOT DESTROYED
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
INC C ; NEXT PHYSICAL UNIT
|
||||
DJNZ ASCI_INIT0 ; LOOP UNTIL DONE
|
||||
;
|
||||
; ASCI0
|
||||
PRTS("ASCI0: IO=0x$")
|
||||
LD A,Z180_TDR0
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_COMMA
|
||||
LD A,Z180_RDR0
|
||||
CALL PRTHEXBYTE
|
||||
; PRTS(" BAUD=$")
|
||||
; LD HL,ASCI0BAUD / 10
|
||||
; CALL PRTDEC
|
||||
; PRTC('0')
|
||||
|
||||
#IF (PLATFORM != PLT_MK4)
|
||||
LD A,66H
|
||||
OUT0 (Z180_ASEXT0),A
|
||||
LD A,64H
|
||||
OUT0 (Z180_CNTLA0),A
|
||||
LD A,Z180_ASCIB0
|
||||
OUT0 (Z180_CNTLB0),A
|
||||
#ENDIF
|
||||
;
|
||||
; ASCI1
|
||||
CALL NEWLINE
|
||||
PRTS("ASCI1: IO=0x$")
|
||||
LD A,Z180_TDR1
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_COMMA
|
||||
LD A,Z180_RDR1
|
||||
CALL PRTHEXBYTE
|
||||
; PRTS(" BAUD=$")
|
||||
; LD HL,ASCI1BAUD / 10
|
||||
; CALL PRTDEC
|
||||
; PRTC('0')
|
||||
|
||||
#IF (PLATFORM != PLT_MK4)
|
||||
LD A,66H
|
||||
OUT0 (Z180_ASEXT1),A
|
||||
LD A,64H
|
||||
OUT0 (Z180_CNTLA1),A
|
||||
LD A,Z180_ASCIB1
|
||||
OUT0 (Z180_CNTLB1),A
|
||||
#ENDIF
|
||||
|
||||
RET
|
||||
;
|
||||
; CHARACTER DEVICE DRIVER ENTRY
|
||||
; A: RESULT (OUT), CF=ERR
|
||||
; B: FUNCTION (IN)
|
||||
@@ -105,59 +169,16 @@ ASCI0:
|
||||
JP Z,ASCI0_IST
|
||||
DEC A
|
||||
JP Z,ASCI0_OST
|
||||
DEC A
|
||||
JP Z,ASCI0_INITDEV
|
||||
DEC A
|
||||
JP Z,ASCI0_QUERY
|
||||
DEC A
|
||||
JP Z,ASCI0_DEVICE
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI_INIT:
|
||||
; ASCI0
|
||||
PRTS("ASCI0: IO=0x$")
|
||||
LD A,Z180_TDR0
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_COMMA
|
||||
LD A,Z180_RDR0
|
||||
CALL PRTHEXBYTE
|
||||
; PRTS(" BAUD=$")
|
||||
; LD HL,ASCI0BAUD / 10
|
||||
; CALL PRTDEC
|
||||
; PRTC('0')
|
||||
|
||||
#IF (PLATFORM != PLT_MK4)
|
||||
LD A,66H
|
||||
OUT0 (Z180_ASEXT0),A
|
||||
LD A,64H
|
||||
OUT0 (Z180_CNTLA0),A
|
||||
LD A,Z180_ASCIB0
|
||||
OUT0 (Z180_CNTLB0),A
|
||||
#ENDIF
|
||||
|
||||
; ASCI1
|
||||
CALL NEWLINE
|
||||
PRTS("ASCI1: IO=0x$")
|
||||
LD A,Z180_TDR1
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_COMMA
|
||||
LD A,Z180_RDR1
|
||||
CALL PRTHEXBYTE
|
||||
; PRTS(" BAUD=$")
|
||||
; LD HL,ASCI1BAUD / 10
|
||||
; CALL PRTDEC
|
||||
; PRTC('0')
|
||||
|
||||
#IF (PLATFORM != PLT_MK4)
|
||||
LD A,66H
|
||||
OUT0 (Z180_ASEXT1),A
|
||||
LD A,64H
|
||||
OUT0 (Z180_CNTLA1),A
|
||||
LD A,Z180_ASCIB1
|
||||
OUT0 (Z180_CNTLB1),A
|
||||
#ENDIF
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI0_IN:
|
||||
CALL ASCI0_IST
|
||||
OR A
|
||||
@@ -207,16 +228,36 @@ ASCI0_OST:
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI0_INITDEV:
|
||||
ASCI0_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI0_DEVICE:
|
||||
LD D,CIODEV_ASCI ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI1:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,ASCI0_IN
|
||||
JR Z,ASCI1_IN
|
||||
DEC A
|
||||
JR Z,ASCI0_OUT
|
||||
JR Z,ASCI1_OUT
|
||||
DEC A
|
||||
JR Z,ASCI0_IST
|
||||
JR Z,ASCI1_IST
|
||||
DEC A
|
||||
JR Z,ASCI0_OST
|
||||
JR Z,ASCI1_OST
|
||||
DEC A
|
||||
JP Z,ASCI1_INITDEV
|
||||
DEC A
|
||||
JP Z,ASCI1_QUERY
|
||||
DEC A
|
||||
JP Z,ASCI1_DEVICE
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
@@ -268,3 +309,17 @@ ASCI1_OST:
|
||||
XOR A
|
||||
INC A ; SIGNAL BUFFER EMPTY, A = 1
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI1_INITDEV:
|
||||
ASCI1_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI1_DEVICE:
|
||||
LD D,CIODEV_ASCI ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
@@ -37,7 +37,89 @@ CVDU_INIT:
|
||||
PRTS("KB$")
|
||||
CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE
|
||||
|
||||
CVDU_RESET:
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_CVDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
CALL TSTPT ; *DEBUG*
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
LD E,0 ; VIDEO MODE = 0
|
||||
JP CVDU_VDAINI
|
||||
;
|
||||
;======================================================================
|
||||
; CVDU DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
CVDU_DISPCIO:
|
||||
JP PANIC
|
||||
CVDU_CIODISPADR .EQU $ - 2
|
||||
;
|
||||
;======================================================================
|
||||
; CVDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
CVDU_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
|
||||
JP Z,CVDU_VDAINI ; $40
|
||||
DEC A
|
||||
JP Z,CVDU_VDAQRY ; $41
|
||||
DEC A
|
||||
JP Z,CVDU_VDARES ; $42
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCS ; $43
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCP ; $44
|
||||
DEC A
|
||||
JP Z,CVDU_VDASAT ; $45
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCO ; $46
|
||||
DEC A
|
||||
JP Z,CVDU_VDAWRC ; $47
|
||||
DEC A
|
||||
JP Z,CVDU_VDAFIL ; $48
|
||||
DEC A
|
||||
JP Z,CVDU_VDACPY ; $49
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCR ; $4A
|
||||
DEC A
|
||||
JP Z,KBD_STAT ; $4B
|
||||
DEC A
|
||||
JP Z,KBD_FLUSH ; $4C
|
||||
DEC A
|
||||
JP Z,KBD_READ ; $4D
|
||||
CALL PANIC
|
||||
|
||||
CVDU_VDAINI:
|
||||
; RESET VDA
|
||||
PUSH DE ; SAVE EMULATION TYPE (IN D)
|
||||
CALL CVDU_VDARES ; RESET VDA
|
||||
POP DE ; RECOVER EMULATION TYPE
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD C,D ; EMULATION MODE TO C
|
||||
LD DE,CVDU_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL TSTPT ; *DEBUG*
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
LD (CVDU_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
|
||||
CALL TSTPT ; *DEBUG*
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
CVDU_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,CVDU_ROWS ; ROWS
|
||||
LD E,CVDU_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
CVDU_VDARES:
|
||||
LD A,$0E ; ATTRIBUTE IS STANDARD WHITE ON BLACK
|
||||
LD (CVDU_ATTR),A ; SAVE IT
|
||||
|
||||
@@ -49,89 +131,9 @@ CVDU_RESET:
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; CVDU DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
CVDU_DISPCIO:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,CVDU_CIOIN ; $00
|
||||
DEC A
|
||||
JR Z,CVDU_CIOOUT ; $01
|
||||
DEC A
|
||||
JR Z,CVDU_CIOIST ; $02
|
||||
DEC A
|
||||
JR Z,CVDU_CIOOST ; $03
|
||||
CALL PANIC
|
||||
;
|
||||
CVDU_CIOIN:
|
||||
JP KBD_READ ; CHAIN TO KEYBOARD DRIVER
|
||||
;
|
||||
CVDU_CIOIST:
|
||||
JP KBD_STAT ; CHAIN TO KEYBOARD DRIVER
|
||||
;
|
||||
CVDU_CIOOUT:
|
||||
JP CVDU_VDAWRC ; WRITE CHARACTER
|
||||
;
|
||||
CVDU_CIOOST:
|
||||
XOR A ; A = 0
|
||||
INC A ; A = 1, SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; CVDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
CVDU_DISPVDA:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
|
||||
JR Z,CVDU_VDAINI ; $40
|
||||
DEC A
|
||||
JR Z,CVDU_VDAQRY ; $41
|
||||
DEC A
|
||||
JR Z,CVDU_VDARES ; $42
|
||||
DEC A
|
||||
JR Z,CVDU_VDASCS ; $43
|
||||
DEC A
|
||||
JR Z,CVDU_VDASCP ; $44
|
||||
DEC A
|
||||
JR Z,CVDU_VDASAT ; $45
|
||||
DEC A
|
||||
JR Z,CVDU_VDASCO ; $46
|
||||
DEC A
|
||||
JR Z,CVDU_VDAWRC ; $47
|
||||
DEC A
|
||||
JR Z,CVDU_VDAFIL ; $48
|
||||
DEC A
|
||||
JR Z,CVDU_VDACPY ; $49
|
||||
DEC A
|
||||
JR Z,CVDU_VDASCR ; $4A
|
||||
DEC A
|
||||
JP Z,KBD_STAT ; $4B
|
||||
DEC A
|
||||
JP Z,KBD_FLUSH ; $4C
|
||||
DEC A
|
||||
JP Z,KBD_READ ; $4D
|
||||
CALL PANIC
|
||||
|
||||
CVDU_VDAINI:
|
||||
JP CVDU_INIT ; INITIALIZE
|
||||
|
||||
CVDU_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,CVDU_ROWS ; ROWS
|
||||
LD E,CVDU_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
XOR A
|
||||
RET
|
||||
|
||||
CVDU_VDARES:
|
||||
JR CVDU_RESET ; DO THE RESET
|
||||
|
||||
CVDU_VDASCS:
|
||||
CALL PANIC ; NOT IMPLEMENTED (YET)
|
||||
|
||||
@@ -511,6 +511,7 @@ CVDU_FONTDATA:
|
||||
.DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.DB $0F,$0F,$0F,$0F,$FF,$FF,$FF,$FF
|
||||
.DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
#IF 0 ; *DEBUG*
|
||||
.DB $0F,$0F,$0F,$0F,$F0,$F0,$F0,$F0
|
||||
.DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.DB $3C,$66,$6E,$6E,$60,$62,$3C,$00
|
||||
@@ -1023,3 +1024,4 @@ CVDU_FONTDATA:
|
||||
.DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.DB $0F,$0F,$0F,$0F,$FF,$FF,$FF,$FF
|
||||
.DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
#ENDIF
|
||||
@@ -37,13 +37,15 @@ BS: .EQU 08H ; ASCII BACKSPACE CHARACTER
|
||||
JP DSKY_ENTRY
|
||||
JP UART_ENTRY
|
||||
;
|
||||
#DEFINE CIOMODE_HBIOS
|
||||
#INCLUDE "util.asm"
|
||||
;
|
||||
#INCLUDE "memmgr.asm"
|
||||
;
|
||||
#IF DSKYENABLE
|
||||
;
|
||||
#INCLUDE "dsky.asm"
|
||||
;
|
||||
;
|
||||
;__DSKY_ENTRY_________________________________________________________________
|
||||
;
|
||||
DSKY_ENTRY:
|
||||
@@ -686,6 +688,76 @@ GETLNDONE:
|
||||
POP DE ; RESTORE DE
|
||||
RET ;
|
||||
;
|
||||
;__COUT_______________________________________________________________________
|
||||
;
|
||||
; OUTPUT CHARACTER FROM A
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
COUT:
|
||||
; SAVE ALL INCOMING REGISTERS
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; OUTPUT CHARACTER TO CONSOLE VIA HBIOS
|
||||
LD E,A ; OUTPUT CHAR TO E
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR
|
||||
RST 08 ; HBIOS OUTPUTS CHARACTDR
|
||||
;
|
||||
; RESTORE ALL REGISTERS
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;__CIN________________________________________________________________________
|
||||
;
|
||||
; INPUT CHARACTER TO A
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
CIN:
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT)
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; INPUT CHARACTER FROM CONSOLE VIA HBIOS
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR
|
||||
RST 08 ; HBIOS READS CHARACTDR
|
||||
LD A,E ; MOVE CHARACTER TO A FOR RETURN
|
||||
;
|
||||
; RESTORE REGISTERS (AF IS OUTPUT)
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
;__CST________________________________________________________________________
|
||||
;
|
||||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING)
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
CST:
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT)
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; GET CONSOLE INPUT STATUS VIA HBIOS
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS
|
||||
RST 08 ; HBIOS RETURNS STATUS IN A
|
||||
;
|
||||
; RESTORE REGISTERS (AF IS OUTPUT)
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
;__KIN________________________________________________________________________
|
||||
;
|
||||
; READ FROM THE SERIAL PORT AND ECHO & CONVERT INPUT TO UCASE
|
||||
|
||||
252
Source/HBIOS/dsky.asm
Normal file
252
Source/HBIOS/dsky.asm
Normal file
@@ -0,0 +1,252 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY KEYBOARD ROUTINES
|
||||
;==================================================================================================
|
||||
;
|
||||
PPIA .EQU PPIBASE + 0 ; PORT A
|
||||
PPIB .EQU PPIBASE + 1 ; PORT B
|
||||
PPIC .EQU PPIBASE + 2 ; PORT C
|
||||
PPIX .EQU PPIBASE + 3 ; PPI CONTROL PORT
|
||||
|
||||
;
|
||||
; _____C0______C1______C2______C3__
|
||||
;B5 | $20 D $60 E $A0 F $E0 BO
|
||||
;B4 | $10 A $50 B $90 C $D0 GO
|
||||
;B3 | $08 7 $48 8 $88 9 $C8 EX
|
||||
;B2 | $04 4 $44 5 $84 6 $C4 DE
|
||||
;B1 | $02 1 $42 2 $82 3 $C2 EN
|
||||
;B0 | $01 FW $41 0 $81 BK $C1 CL
|
||||
;
|
||||
KY_0 .EQU 000H
|
||||
KY_1 .EQU 001H
|
||||
KY_2 .EQU 002H
|
||||
KY_3 .EQU 003H
|
||||
KY_4 .EQU 004H
|
||||
KY_5 .EQU 005H
|
||||
KY_6 .EQU 006H
|
||||
KY_7 .EQU 007H
|
||||
KY_8 .EQU 008H
|
||||
KY_9 .EQU 009H
|
||||
KY_A .EQU 00AH
|
||||
KY_B .EQU 00BH
|
||||
KY_C .EQU 00CH
|
||||
KY_D .EQU 00DH
|
||||
KY_E .EQU 00EH
|
||||
KY_F .EQU 00FH
|
||||
KY_FW .EQU 010H ; FORWARD
|
||||
KY_BK .EQU 011H ; BACKWARD
|
||||
KY_CL .EQU 012H ; CLEAR
|
||||
KY_EN .EQU 013H ; ENTER
|
||||
KY_DE .EQU 014H ; DEPOSIT
|
||||
KY_EX .EQU 015H ; EXAMINE
|
||||
KY_GO .EQU 016H ; GO
|
||||
KY_BO .EQU 017H ; BOOT
|
||||
;
|
||||
;__DSKY_INIT_________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_INIT:
|
||||
LD A,82H
|
||||
OUT (PPIX),A
|
||||
LD A,30H ;disable /CS on PPISD card(s)
|
||||
OUT (PPIC),A
|
||||
XOR A
|
||||
LD (KY_BUF),A
|
||||
RET
|
||||
|
||||
#IFDEF DSKY_KBD
|
||||
;
|
||||
;__KY_STAT___________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_STAT:
|
||||
; IF WE ALREADY HAVE A KEY, RETURN WITH NZ
|
||||
LD A,(KY_BUF)
|
||||
OR A
|
||||
RET NZ
|
||||
; SCAN FOR A KEYPRESS, A=0 NO DATA OR A=RAW BYTE
|
||||
CALL KY_SCAN ; SCAN KB ONCE
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; NOTHING FOUND, GET OUT
|
||||
LD (KY_BUF),A ; SAVE RAW KEYCODE
|
||||
RET ; RETURN
|
||||
;
|
||||
;__KY_GET____________________________________________________________________________________________
|
||||
;
|
||||
; GET A SINGLE KEY (WAIT FOR ONE IF NECESSARY)
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_GET:
|
||||
; SEE IF WE ALREADY HAVE A KEY SAVED, GO TO DECODE IF SO
|
||||
LD A,(KY_BUF)
|
||||
OR A
|
||||
JR NZ,KY_DECODE
|
||||
; NO KEY SAVED, WAIT FOR ONE
|
||||
KY_STATLOOP:
|
||||
CALL KY_STAT
|
||||
OR A
|
||||
JR Z,KY_STATLOOP
|
||||
; DECODE THE RAW VALUE
|
||||
KY_DECODE:
|
||||
LD D,00H
|
||||
LD HL,KY_KEYMAP ; POINT TO BEGINNING OF TABLE
|
||||
KY_GET_LOOP:
|
||||
CP (HL) ; MATCH?
|
||||
JR Z,KY_GET_DONE ; FOUND, DONE
|
||||
INC HL
|
||||
INC D ; D + 1
|
||||
JR NZ,KY_GET_LOOP ; NOT FOUND, LOOP UNTIL EOT
|
||||
KY_GET_DONE:
|
||||
; CLEAR OUT KEY_BUF
|
||||
XOR A
|
||||
LD (KY_BUF),A
|
||||
; RETURN THE INDEX POSITION WHERE THE RAW VALUE WAS FOUND
|
||||
LD A,D
|
||||
RET
|
||||
;
|
||||
;__KY_SCAN____________________________________________________________________________________________
|
||||
;
|
||||
; SCAN KEYBOARD MATRIX FOR AN INPUT
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_SCAN:
|
||||
LD C,0000H
|
||||
LD A,41H | 30H ; SCAN COL ONE
|
||||
OUT (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
LD A,00H ; RETURN NULL
|
||||
RET ; EXIT
|
||||
|
||||
KY_SCAN_FOUND:
|
||||
AND 3FH ; CLEAR TOP TWO BITS
|
||||
OR C ; ADD IN ROW BITS
|
||||
LD C,A ; STORE VALUE
|
||||
|
||||
; WAIT FOR KEY TO BE RELEASED
|
||||
LD A,4FH | 30H ; SCAN ALL COL LINES
|
||||
OUT (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
KY_CLEAR_LOOP: ; WAIT FOR KEY TO CLEAR
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
|
||||
LD A,C ; RESTORE VALUE
|
||||
RET
|
||||
;
|
||||
;_KEYMAP_TABLE_____________________________________________________________________________________________________________
|
||||
;
|
||||
KY_KEYMAP:
|
||||
; 0 1 2 3 4 5 6 7
|
||||
.DB 041H,002H,042H,082H,004H,044H,084H,008H
|
||||
; 8 9 A B C D E F
|
||||
.DB 048H,088H,010H,050H,090H,020H,060H,0A0H
|
||||
; FW BK CL EN DE EX GO BO
|
||||
.DB 001H,081H,0C1H,0C2H,0C4H,0C8H,0D0H,0E0H
|
||||
;
|
||||
#ENDIF ; DSKY_KBD
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY HEX DISPLAY
|
||||
;==================================================================================================
|
||||
;
|
||||
DSKY_HEXOUT:
|
||||
LD B,DSKY_HEXBUFLEN
|
||||
LD HL,DSKY_BUF
|
||||
LD DE,DSKY_HEXBUF
|
||||
DSKY_HEXOUT1:
|
||||
LD A,(DE) ; FIRST NIBBLE
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(DE) ; SECOND NIBBLE
|
||||
AND 0FH
|
||||
LD (HL),A
|
||||
INC HL
|
||||
INC DE ; NEXT BYTE
|
||||
DJNZ DSKY_HEXOUT1
|
||||
|
||||
LD A,82H ; SETUP PPI
|
||||
OUT (PPIX),A
|
||||
CALL DSKY_COFF
|
||||
LD A,0D0H ; 7218 -> (DATA COMING, HEXA DECODE)
|
||||
OUT (PPIA),A
|
||||
CALL DSKY_STROBEC
|
||||
|
||||
LD HL,DSKY_BUF ; POINT TO START OF BUF
|
||||
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
|
||||
LD C,PPIA
|
||||
DSKY_HEXOUT2:
|
||||
OUTI
|
||||
JP Z,DSKY_STROBE ; DO FINAL STROBE AND RETURN
|
||||
CALL DSKY_STROBE
|
||||
JR DSKY_HEXOUT2
|
||||
|
||||
DSKY_STROBEC:
|
||||
LD A,80H | 30H
|
||||
JP DSKY_STROBE0
|
||||
|
||||
DSKY_STROBE:
|
||||
LD A,00H | 30H ; SET WRITE STROBE
|
||||
|
||||
DSKY_STROBE0:
|
||||
OUT (PPIC),A ; OUT TO PORTC
|
||||
CALL DLY2 ; DELAY
|
||||
DSKY_COFF
|
||||
LD A,40H | 30H ; SET CONTROL PORT OFF
|
||||
OUT (PPIC),A ; OUT TO PORTC
|
||||
; CALL DSKY_DELAY ; WAIT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
KY_BUF .DB 0
|
||||
DSKY_BUF: .FILL 8,0
|
||||
DSKY_BUFLEN .EQU $ - DSKY_BUF
|
||||
DSKY_HEXBUF .FILL 4,0
|
||||
DSKY_HEXBUFLEN .EQU $ - DSKY_HEXBUF
|
||||
@@ -399,11 +399,6 @@ FD_DISPATCH:
|
||||
JP Z,FD_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,FD_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
FD_VERIFY:
|
||||
FD_FORMAT:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,35 +7,23 @@ BF_CIOIN .EQU BF_CIO + 0 ; CHARACTER INPUT
|
||||
BF_CIOOUT .EQU BF_CIO + 1 ; CHARACTER OUTPUT
|
||||
BF_CIOIST .EQU BF_CIO + 2 ; CHARACTER INPUT STATUS
|
||||
BF_CIOOST .EQU BF_CIO + 3 ; CHARACTER OUTPUT STATUS
|
||||
BF_CIOCFG .EQU BF_CIO + 4 ; CHARACTER I/O CONFIG
|
||||
BF_CIOGETCNT .EQU BF_CIO + 8 ; CHARACTER DEVICE COUNT
|
||||
BF_CIOGETINF .EQU BF_CIO + 9 ; CHARACTER DEVICE INFO
|
||||
BF_CIOINIT .EQU BF_CIO + 4 ; INIT/RESET DEVICE/LINE CONFIG
|
||||
BF_CIOQUERY .EQU BF_CIO + 5 ; REPORT DEVICE/LINE CONFIG
|
||||
BF_CIODEVICE .EQU BF_CIO + 6 ; REPORT DEVICE INFO
|
||||
;
|
||||
BF_DIO .EQU $10
|
||||
BF_DIORD .EQU BF_DIO + 0 ; DISK READ
|
||||
BF_DIOWR .EQU BF_DIO + 1 ; DISK WRITE
|
||||
BF_DIOST .EQU BF_DIO + 2 ; DISK STATUS
|
||||
BF_DIOMED .EQU BF_DIO + 3 ; DISK MEDIA
|
||||
BF_DIOID .EQU BF_DIO + 4 ; DISK IDENTIFY
|
||||
BF_DIOGETBUF .EQU BF_DIO + 8 ; DISK GET BUFFER ADR
|
||||
BF_DIOSETBUF .EQU BF_DIO + 9 ; DISK SET BUFFER ADR
|
||||
BF_DIOGETCNT .EQU BF_DIO + 10 ; DISK DEVICE COUNT
|
||||
BF_DIOGETINF .EQU BF_DIO + 11 ; DISK DEVICE INFO
|
||||
;
|
||||
BF_NDIO .EQU $50
|
||||
BF_NDIOSTATUS .EQU BF_NDIO + 0 ; DISK STATUS
|
||||
BF_NDIORESET .EQU BF_NDIO + 1 ; DISK RESET
|
||||
BF_NDIOSEEK .EQU BF_NDIO + 2 ; DISK SEEK
|
||||
BF_NDIOREAD .EQU BF_NDIO + 3 ; DISK READ SECTORS
|
||||
BF_NDIOWRITE .EQU BF_NDIO + 4 ; DISK WRITE SECTORS
|
||||
BF_NDIOVERIFY .EQU BF_NDIO + 5 ; DISK VERIFY SECTORS
|
||||
BF_NDIOFORMAT .EQU BF_NDIO + 6 ; DISK FORMAT TRACK
|
||||
BF_NDIODEVICE .EQU BF_NDIO + 7 ; DISK DEVICE REPORT
|
||||
BF_NDIOMEDIA .EQU BF_NDIO + 8 ; DISK MEDIA REPORT
|
||||
BF_NDIODEFMED .EQU BF_NDIO + 9 ; DEFINE DISK MEDIA
|
||||
BF_NDIOCAP .EQU BF_NDIO + 10 ; DISK CAPACITY REPORT
|
||||
BF_NDIOGEOM .EQU BF_NDIO + 11 ; DISK GEOMETRY REPORT
|
||||
BF_NDIOINFO .EQU BF_NDIO + 15 ; DISK SYSTEM INFO QUERY
|
||||
BF_DIOSTATUS .EQU BF_DIO + 0 ; DISK STATUS
|
||||
BF_DIORESET .EQU BF_DIO + 1 ; DISK RESET
|
||||
BF_DIOSEEK .EQU BF_DIO + 2 ; DISK SEEK
|
||||
BF_DIOREAD .EQU BF_DIO + 3 ; DISK READ SECTORS
|
||||
BF_DIOWRITE .EQU BF_DIO + 4 ; DISK WRITE SECTORS
|
||||
BF_DIOVERIFY .EQU BF_DIO + 5 ; DISK VERIFY SECTORS
|
||||
BF_DIOFORMAT .EQU BF_DIO + 6 ; DISK FORMAT TRACK
|
||||
BF_DIODEVICE .EQU BF_DIO + 7 ; DISK DEVICE INFO REPORT
|
||||
BF_DIOMEDIA .EQU BF_DIO + 8 ; DISK MEDIA REPORT
|
||||
BF_DIODEFMED .EQU BF_DIO + 9 ; DEFINE DISK MEDIA
|
||||
BF_DIOCAP .EQU BF_DIO + 10 ; DISK CAPACITY REPORT
|
||||
BF_DIOGEOM .EQU BF_DIO + 11 ; DISK GEOMETRY REPORT
|
||||
;
|
||||
BF_RTC .EQU $20
|
||||
BF_RTCGETTIM .EQU BF_RTC + 0 ; GET TIME
|
||||
@@ -44,15 +32,8 @@ BF_RTCGETBYT .EQU BF_RTC + 2 ; GET NVRAM BYTE BY INDEX
|
||||
BF_RTCSETBYT .EQU BF_RTC + 3 ; SET NVRAM BYTE BY INDEX
|
||||
BF_RTCGETBLK .EQU BF_RTC + 4 ; GET NVRAM DATA BLOCK
|
||||
BF_RTCSETBLK .EQU BF_RTC + 5 ; SET NVRAM DATA BLOCK
|
||||
;
|
||||
BF_EMU .EQU $30
|
||||
BF_EMUIN .EQU BF_EMU + 0 ; EMULATOR CHARACTER INPUT
|
||||
BF_EMUOUT .EQU BF_EMU + 1 ; EMULATOR CHARACTER OUTPUT
|
||||
BF_EMUIST .EQU BF_EMU + 2 ; EMULATOR CHARACTER INPUT STATUS
|
||||
BF_EMUOST .EQU BF_EMU + 3 ; EMULATOR CHARACTER OUTPUT STATUS
|
||||
BF_EMUCFG .EQU BF_EMU + 4 ; EMULATOR CHARACTER I/O CONFIG
|
||||
BF_EMUINI .EQU BF_EMU + 8 ; INITIALIZE EMULATION
|
||||
BF_EMUQRY .EQU BF_EMU + 9 ; QUERY EMULATION STATUS
|
||||
;;
|
||||
BF_EMU .EQU $30 ; DEPRECATED
|
||||
;
|
||||
BF_VDA .EQU $40
|
||||
BF_VDAINI .EQU BF_VDA + 0 ; INITIALIZE VDU
|
||||
@@ -76,12 +57,17 @@ BF_SYSGETBNK .EQU BF_SYS + 1 ; GET CURRENT BANK
|
||||
BF_SYSCPY .EQU BF_SYS + 2 ; COPY TO/FROM RAM/ROM MEMORY BANK
|
||||
BF_SYSXCPY .EQU BF_SYS + 3 ; EXTENDED COPY SETUP
|
||||
BF_SYSALLOC .EQU BF_SYS + 4 ; ALLOC HBIOS HEAP MEMORY
|
||||
BF_SYSGETVER .EQU BF_SYS + 6 ; GET VERSION OF HBIOS
|
||||
BF_SYSGET .EQU BF_SYS + 5 ; GET HBIOS INFO
|
||||
BF_SYSSET .EQU BF_SYS + 6 ; SET HBIOS PARMS
|
||||
BF_SYSHCBGETB .EQU BF_SYS + 8 ; GET HCB BYTE VALUE
|
||||
BF_SYSHCBPUTB .EQU BF_SYS + 9 ; PUT HCB BYTE VALUE
|
||||
BF_SYSHCBGETW .EQU BF_SYS + 10 ; GET HCB WORD VALUE
|
||||
BF_SYSHCBPUTW .EQU BF_SYS + 11 ; PUT HCB BYTE VALUE
|
||||
;
|
||||
BF_SYSGET_CIOCNT .EQU $00 ; GET SERIAL UNIT COUNT
|
||||
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
|
||||
BF_SYSGET_VER .EQU $F0 ; GET HBIOS VERSION INFO
|
||||
;
|
||||
; CHARACTER DEVICES
|
||||
;
|
||||
CIODEV_UART .EQU $00
|
||||
@@ -116,6 +102,12 @@ VDADEV_VDU .EQU $10 ; ECB VDU - 6545 CHIP
|
||||
VDADEV_CVDU .EQU $20 ; ECB COLOR VDU - 8563 CHIP (NOT IMP)
|
||||
VDADEV_UPD7220 .EQU $30 ; ECB uP7220 (NOT IMPLEMENTED)
|
||||
VDADEV_N8V .EQU $40 ; N8 ONBOARD VDA SUBSYSTEM
|
||||
;
|
||||
; EMULATION TYPES
|
||||
;
|
||||
EMUTYP_NONE .EQU 0 ; NONE
|
||||
EMUTYP_TTY .EQU 1 ; TTY
|
||||
EMUTYP_ANSI .EQU 2 ; ANSI
|
||||
;
|
||||
; HBIOS CONTROL BLOCK OFFSETS
|
||||
; WARNING: THESE OFFSETS WILL CHANGE SIGNIFICANTLY BETWEEN RELEASES
|
||||
@@ -133,8 +125,8 @@ HCB_BOOTBID .EQU $0C ; BANK ID OF ROM PAGE BOOTED (BYTE)
|
||||
HCB_SERDEV .EQU $0D ; PRIMARY SERIAL DEVICE/UNIT (BYTE)
|
||||
HCB_CRTDEV .EQU $0E ; CRT DISPLAY DEVICE/UNIT (BYTE)
|
||||
HCB_CONDEV .EQU $0F ; ACTIVE CONSOLE DEVICE/UNIT (BYTE)
|
||||
HCB_CUREMU .EQU $10 ; CURRENT VDA TERMINAL EMULATION
|
||||
HCB_CURVDA .EQU $11 ; CURRENT VDA TARGET FOR EMULATION
|
||||
;HCB_CUREMU .EQU $10 ; CURRENT VDA TERMINAL EMULATION (DEPRECATED)
|
||||
;HCB_CURVDA .EQU $11 ; CURRENT VDA TARGET FOR EMULATION (DEPRECATED)
|
||||
;
|
||||
HCB_HEAP .EQU $20 ; DWORD ADDRESS OF START OF HEAP
|
||||
HCB_HEAPTOP .EQU $22 ; DWORD ADDRESS OF TOP OF HEAP
|
||||
|
||||
@@ -80,11 +80,6 @@ HDSK_DISPATCH:
|
||||
JP Z,HDSK_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,HDSK_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
HDSK_VERIFY:
|
||||
HDSK_FORMAT:
|
||||
|
||||
@@ -355,11 +355,6 @@ IDE_DISPATCH:
|
||||
JP Z,IDE_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,IDE_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
IDE_VERIFY:
|
||||
IDE_FORMAT:
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
; LOADER
|
||||
;==================================================================================================
|
||||
;
|
||||
P2LOC .EQU $F000 ; PHASE 2 RUN LOCATION
|
||||
P2LOC .EQU $F000 ; PHASE 2 RUN LOCATION
|
||||
;
|
||||
#IFDEF ROMLOAD
|
||||
CURBNK .EQU BID_BOOT
|
||||
CURBNK .EQU BID_BOOT
|
||||
#ELSE
|
||||
CURBNK .EQU BID_USR
|
||||
CURBNK .EQU BID_USR
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; HBIOS CONFIGURATION BLOCK
|
||||
; HBIOS CONFIGURATION BLOCK (HCB)
|
||||
;==================================================================================================
|
||||
;
|
||||
.ORG $ + P2LOC
|
||||
@@ -27,14 +27,14 @@ CB_CPUKHZ .DW CPUKHZ
|
||||
CB_RAMBANKS .DB RAMSIZE / 32
|
||||
CB_ROMBANKS .DB ROMSIZE / 32
|
||||
;
|
||||
CB_BOOTVOL .DW 0
|
||||
CB_BOOTBID .DB 0
|
||||
CB_SERDEV .DB SERDEV
|
||||
CB_CRTDEV .DB CRTDEV
|
||||
CB_CONDEV .DB SERDEV
|
||||
CB_BOOTVOL .DW 0 ; BOOT VOLUME IS UNIT/SLICE, SET BY LOADER
|
||||
CB_BOOTBID .DB 0 ; BOOT BANK ID, SET BY LOADER
|
||||
CB_SERDEV .DB 0 ; PRIMARY SERIAL UNIT IS UNIT #0 BY FIAT
|
||||
CB_CRTDEV .DB $FF ; PRIMARY CRT UNIT, $FF UNTIL AFTER HBIOS INIT
|
||||
CB_CONDEV .DB $FF ; CONSOLE UNIT, $FF UNTIL AFTER HBIOS INIT
|
||||
;
|
||||
CB_CUREMU .DB VDAEMU ; CURRENT VDA TERMINAL EMULATION
|
||||
CB_CURVDA .DB VDADEV ; CURRENT VDA TARGET FOR EMULATION
|
||||
;CB_CUREMU .DB VDAEMU ; CURRENT VDA TERMINAL EMULATION (DEPRECATED)
|
||||
;CB_CURVDA .DB VDADEV ; CURRENT VDA TARGET FOR EMULATION (DEPRECATED)
|
||||
;
|
||||
; MEMORY MANAGEMENT VARIABLES START AT $20
|
||||
;
|
||||
@@ -55,139 +55,6 @@ CB_BIDRAMD0 .DB BID_RAMD0
|
||||
CB_BIDRAMDN .DB BID_RAMDN
|
||||
CB_BIDROMD0 .DB BID_ROMD0
|
||||
CB_BIDROMDN .DB BID_ROMDN
|
||||
;
|
||||
; DEVICE LISTS START AT $E0
|
||||
;
|
||||
.FILL (CB + $E0 - $),0
|
||||
;
|
||||
; CHARACTER DEVICE LIST AT $E0 (7 ENTRY MAX)
|
||||
;
|
||||
.DB CB_CDLEND - CB_CDL ; ENTRY COUNT
|
||||
;
|
||||
CB_CDL: ; START OF LIST
|
||||
;
|
||||
#IF ASCIENABLE
|
||||
.DB CIODEV_ASCI + 0 ; ASCI0:
|
||||
.DB CIODEV_ASCI + 1 ; ASCI1:
|
||||
#ENDIF
|
||||
;
|
||||
#IF UARTENABLE
|
||||
#IF (UARTCNT >= 1)
|
||||
.DB CIODEV_UART + 0 ; UART0:
|
||||
#ENDIF
|
||||
#IF (UARTCNT >= 2)
|
||||
.DB CIODEV_UART + 1 ; UART1:
|
||||
#ENDIF
|
||||
#IF (UARTCNT >= 3)
|
||||
.DB CIODEV_UART + 2 ; UART2:
|
||||
#ENDIF
|
||||
#IF (UARTCNT >= 4)
|
||||
.DB CIODEV_UART + 3 ; UART3:
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
CB_CDLEND:
|
||||
.FILL (CB_CDL + 7 - $),$FF ; PAD REMAINDER OF CDL
|
||||
;
|
||||
; PRINT DEVICE LIST AT $E8 (3 ENTRY MAX)
|
||||
;
|
||||
.DB CB_PDLEND - CB_PDL ; ENTRY COUNT
|
||||
;
|
||||
CB_PDL: ; START OF LIST
|
||||
;
|
||||
CB_PDLEND:
|
||||
.FILL (CB_PDL + 3 - $),$FF ; PAD REMAINDER OF PDL
|
||||
;
|
||||
; VIDEO DISPLAY DEVICE LIST AT $EC (3 ENTRY MAX)
|
||||
;
|
||||
.DB CB_VDLEND - CB_VDL ; ENTRY COUNT
|
||||
;
|
||||
CB_VDL: ; START OF LIST
|
||||
;
|
||||
CB_VDLEND:
|
||||
.FILL (CB_VDL + 3 - $),$FF ; PAD REMAINDER OF VDL
|
||||
;
|
||||
; DISK DEVICE LIST AT $F0 (7 ENTRY MAX)
|
||||
;
|
||||
.DB CB_DDLEND - CB_DDL ; ENTRY COUNT
|
||||
;
|
||||
CB_DDL: ; START OF LIST
|
||||
;
|
||||
#IF MDENABLE
|
||||
.DB DIODEV_MD + 1 ; MD1: (RAM DISK)
|
||||
.DB DIODEV_MD + 0 ; MD0: (ROM DISK)
|
||||
#ENDIF
|
||||
;
|
||||
#IF FDENABLE
|
||||
.DB DIODEV_FD + 0 ; FD0: (PRIMARY FLOPPY DRIVE)
|
||||
.DB DIODEV_FD + 1 ; FD1: (SECONDARY FLOPPY DRIVE)
|
||||
#ENDIF
|
||||
;
|
||||
#IF RFENABLE
|
||||
#IF (RFCNT >= 1)
|
||||
.DB DIODEV_RF + 0 ; RF0: (RAMFLOPPY DISK UNIT 0)
|
||||
#ENDIF
|
||||
#IF (RFCNT >= 2)
|
||||
.DB DIODEV_RF + 1 ; RF1: (RAMFLOPPY DISK UNIT 1)
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
#IF IDEENABLE
|
||||
#IF (IDECNT >= 1)
|
||||
.DB DIODEV_IDE + 0 ; IDE0: (IDE PRIMARY MASTER DISK)
|
||||
#ENDIF
|
||||
#IF (IDECNT >= 2)
|
||||
.DB DIODEV_IDE + 1 ; IDE1: (IDE PRIMARY SLAVE DISK)
|
||||
#ENDIF
|
||||
#IF (IDECNT >= 3)
|
||||
.DB DIODEV_IDE + 2 ; IDE2: (IDE SECONDARY MASTER DISK)
|
||||
#ENDIF
|
||||
#IF (IDECNT >= 4)
|
||||
.DB DIODEV_IDE + 3 ; IDE3: (IDE SECONDARY SLAVE DISK)
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
#IF PPIDEENABLE
|
||||
#IF (PPIDECNT >= 1)
|
||||
.DB DIODEV_PPIDE + 0 ; PPIDE0: (PAR PORT IDE PRIMARY MASTER DISK)
|
||||
#ENDIF
|
||||
#IF (PPIDECNT >= 2)
|
||||
.DB DIODEV_PPIDE + 1 ; PPIDE1: (PAR PORT IDE PRIMARY SLAVE DISK)
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
#IF SDENABLE
|
||||
.DB DIODEV_SD + 0 ; SD0: (SD CARD DISK)
|
||||
#IF (SDMODE == SDMODE_DSD)
|
||||
.DB DIODEV_SD + 1 ; SD1: (SD CARD DISK)
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PRPENABLE & PRPSDENABLE)
|
||||
.DB DIODEV_PRPSD + 0 ; PRPSD0: (PROPIO SD DISK)
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPPENABLE & PPPSDENABLE)
|
||||
.DB DIODEV_PPPSD + 0 ; PPPSD0: (PARPORTPROP SD DISK)
|
||||
#ENDIF
|
||||
;
|
||||
#IF HDSKENABLE
|
||||
#IF (HDSKCNT >= 1)
|
||||
.DB DIODEV_HDSK + 0 ; HDSK0: (SIMH DISK DRIVE 0)
|
||||
#ENDIF
|
||||
#IF (HDSKCNT >= 2)
|
||||
.DB DIODEV_HDSK + 1 ; HDSK1: (SIMH DISK DRIVE 1)
|
||||
#ENDIF
|
||||
#IF (HDSKCNT >= 3)
|
||||
.DB DIODEV_HDSK + 2 ; HDSK2: (SIMH DISK DRIVE 2)
|
||||
#ENDIF
|
||||
#IF (HDSKCNT >= 4)
|
||||
.DB DIODEV_HDSK + 3 ; HDSK3: (SIMH DISK DRIVE 3)
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
CB_DDLEND:
|
||||
.FILL (CB_DDL + 15 - $),$FF ; PAD REMAINDER OF DDL
|
||||
;
|
||||
.FILL (CB + HCB_SIZ - $),0 ; PAD REMAINDER OF HCB
|
||||
;
|
||||
@@ -269,7 +136,6 @@ START:
|
||||
LD A,1
|
||||
OUT (MPGENA),A
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
; EMIT FIRST SIGN OF LIFE TO SERIAL PORT
|
||||
;
|
||||
@@ -341,6 +207,7 @@ PHASE2:
|
||||
#ENDIF
|
||||
LD DE,0 ; TARGET ADDRESS IS ZERO
|
||||
LD BC,HB_END ; COPY ALL OF HBIOS IMAGE
|
||||
CALL XIO_DOT ; MARK PROGRESS
|
||||
CALL HB_BNKCPY ; DO IT
|
||||
CALL XIO_DOT ; MARK PROGRESS
|
||||
|
||||
|
||||
@@ -75,12 +75,6 @@ MD_DISPATCH:
|
||||
JP Z,MD_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,MD_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
|
||||
;
|
||||
MD_VERIFY:
|
||||
MD_FORMAT:
|
||||
|
||||
@@ -38,7 +38,90 @@ N8V_INIT:
|
||||
CALL N8V_CRTINIT ; SETUP THE N8V CHIP REGISTERS
|
||||
CALL N8V_LOADFONT ; LOAD FONT DATA FROM ROM TO N8V STRORAGE
|
||||
;
|
||||
N8V_RESET:
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_N8V ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
CALL TSTPT ; *DEBUG*
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
LD E,0 ; VIDEO MODE = 0
|
||||
JP N8V_VDAINI
|
||||
;
|
||||
;======================================================================
|
||||
; N8V DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
N8V_DISPCIO:
|
||||
JP PANIC
|
||||
N8V_CIODISPADR .EQU $ - 2
|
||||
;
|
||||
;======================================================================
|
||||
; N8V DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
N8V_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
|
||||
JP Z,N8V_VDAINI ; $40
|
||||
DEC A
|
||||
JP Z,N8V_VDAQRY ; $41
|
||||
DEC A
|
||||
JP Z,N8V_VDARES ; $42
|
||||
DEC A
|
||||
JP Z,N8V_VDASCS ; $43
|
||||
DEC A
|
||||
JP Z,N8V_VDASCP ; $44
|
||||
DEC A
|
||||
JP Z,N8V_VDASAT ; $45
|
||||
DEC A
|
||||
JP Z,N8V_VDASCO ; $46
|
||||
DEC A
|
||||
JP Z,N8V_VDAWRC ; $47
|
||||
DEC A
|
||||
JP Z,N8V_VDAFIL ; $48
|
||||
DEC A
|
||||
JP Z,N8V_VDACPY ; $49
|
||||
DEC A
|
||||
JP Z,N8V_VDASCR ; $4A
|
||||
DEC A
|
||||
JP Z,PPK_STAT ; $4B
|
||||
DEC A
|
||||
JP Z,PPK_FLUSH ; $4C
|
||||
DEC A
|
||||
JP Z,PPK_READ ; $4D
|
||||
CALL PANIC
|
||||
|
||||
N8V_VDAINI:
|
||||
; RESET VDA
|
||||
PUSH DE ; SAVE EMULATION TYPE (IN D)
|
||||
CALL N8V_VDARES ; RESET VDA
|
||||
POP DE ; RECOVER EMULATION TYPE
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD C,D ; EMULATION MODE TO C
|
||||
LD DE,N8V_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL TSTPT ; *DEBUG*
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
LD (N8V_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
|
||||
CALL TSTPT ; *DEBUG*
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
|
||||
N8V_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,N8V_ROWS ; ROWS
|
||||
LD E,N8V_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
N8V_VDARES:
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL N8V_XY ; SEND CURSOR TO TOP LEFT
|
||||
LD A,' ' ; BLANK THE SCREEN
|
||||
@@ -53,87 +136,6 @@ N8V_RESET:
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; N8V DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
N8V_DISPCIO:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,N8V_CIOIN ; $00
|
||||
DEC A
|
||||
JR Z,N8V_CIOOUT ; $01
|
||||
DEC A
|
||||
JR Z,N8V_CIOIST ; $02
|
||||
DEC A
|
||||
JR Z,N8V_CIOOST ; $03
|
||||
CALL PANIC
|
||||
;
|
||||
N8V_CIOIN:
|
||||
JP PPK_READ ; CHAIN TO KEYBOARD DRIVER
|
||||
;
|
||||
N8V_CIOIST:
|
||||
JP PPK_STAT ; CHAIN TO KEYBOARD DRIVER
|
||||
;
|
||||
N8V_CIOOUT:
|
||||
JP N8V_VDAWRC ; WRITE CHARACTER
|
||||
;
|
||||
N8V_CIOOST:
|
||||
XOR A ; A = 0
|
||||
INC A ; A = 1, SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; N8V DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
N8V_DISPVDA:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
|
||||
JR Z,N8V_VDAINI ; $40
|
||||
DEC A
|
||||
JR Z,N8V_VDAQRY ; $41
|
||||
DEC A
|
||||
JR Z,N8V_VDARES ; $42
|
||||
DEC A
|
||||
JR Z,N8V_VDASCS ; $43
|
||||
DEC A
|
||||
JR Z,N8V_VDASCP ; $44
|
||||
DEC A
|
||||
JR Z,N8V_VDASAT ; $45
|
||||
DEC A
|
||||
JR Z,N8V_VDASCO ; $46
|
||||
DEC A
|
||||
JR Z,N8V_VDAWRC ; $47
|
||||
DEC A
|
||||
JR Z,N8V_VDAFIL ; $48
|
||||
DEC A
|
||||
JR Z,N8V_VDACPY ; $49
|
||||
DEC A
|
||||
JR Z,N8V_VDASCR ; $4A
|
||||
DEC A
|
||||
JP Z,PPK_STAT ; $4B
|
||||
DEC A
|
||||
JP Z,PPK_FLUSH ; $4C
|
||||
DEC A
|
||||
JP Z,PPK_READ ; $4D
|
||||
CALL PANIC
|
||||
|
||||
N8V_VDAINI:
|
||||
JP N8V_INIT ; INITIALIZE
|
||||
|
||||
N8V_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,N8V_ROWS ; ROWS
|
||||
LD E,N8V_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
N8V_VDARES:
|
||||
JR N8V_RESET ; DO THE RESET
|
||||
|
||||
N8V_VDASCS:
|
||||
CALL PANIC ; NOT IMPLEMENTED (YET)
|
||||
|
||||
@@ -350,11 +350,6 @@ PPIDE_DISPATCH:
|
||||
JP Z,PPIDE_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,PPIDE_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
PPIDE_VERIFY:
|
||||
PPIDE_FORMAT:
|
||||
|
||||
@@ -243,6 +243,14 @@ PPP_FWVER .DB $00, $00, $00, $00 ; MMNNBBB (M=MAJOR, N=MINOR, B=BUILD)
|
||||
PPPCON_INIT:
|
||||
CALL NEWLINE
|
||||
PRTS("PPPCON:$")
|
||||
;
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
;
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_PPPCON ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
;
|
||||
XOR A
|
||||
RET
|
||||
@@ -259,6 +267,12 @@ PPPCON_DISPATCH:
|
||||
JR Z,PPPCON_IST ; JUMP IF INPUT STATUS
|
||||
DEC A ; NEXT SUBFUNCTION
|
||||
JR Z,PPPCON_OST ; JUMP IF OUTPUT STATUS
|
||||
DEC A ; NEXT SUBFUNCTION
|
||||
JR Z,PPPCON_INITDEV ; JUMP IF INIT DEVICE
|
||||
DEC A ; NEXT SUBFUNCTION
|
||||
JR Z,PPPCON_QUERY ; JUMP IF QUERY
|
||||
DEC A ; NEXT SUBFUNCTION
|
||||
JR Z,PPPCON_DEVICE ; JUMP IF DEVICE REPORT
|
||||
CALL PANIC ; OTHERWISE SOMETHING IS BADLY BROKEN
|
||||
;
|
||||
; CHARACTER INPUT
|
||||
@@ -306,6 +320,20 @@ PPPCON_OST:
|
||||
INC A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPPCON_INITDEV:
|
||||
PPPCON_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
PPPCON_DEVICE:
|
||||
LD D,CIODEV_PPPCON ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; PARPORTPROP SD CARD DRIVER
|
||||
;==================================================================================================
|
||||
@@ -410,11 +438,6 @@ PPPSD_DISPATCH:
|
||||
JP Z,PPPSD_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,PPPSD_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
PPPSD_VERIFY:
|
||||
PPPSD_FORMAT:
|
||||
|
||||
@@ -119,6 +119,14 @@ PRPCON_INIT:
|
||||
;
|
||||
CALL NEWLINE
|
||||
PRTS("PRPCON:$")
|
||||
;
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
;
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_PRPCON ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
@@ -135,6 +143,12 @@ PRPCON_DISPATCH:
|
||||
JR Z,PRPCON_IST
|
||||
DEC A
|
||||
JR Z,PRPCON_OST
|
||||
DEC A
|
||||
JR Z,PRPCON_INITDEV
|
||||
DEC A
|
||||
JR Z,PRPCON_QUERY
|
||||
DEC A
|
||||
JR Z,PRPCON_DEVICE
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
@@ -181,6 +195,20 @@ PRPCON_OST1:
|
||||
DEC A ; SET A=$FF TO SIGNAL READY
|
||||
RET ; RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_INITDEV:
|
||||
PRPCON_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_DEVICE:
|
||||
LD D,CIODEV_PRPCON ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; PROPIO SD CARD DRIVER
|
||||
;==================================================================================================
|
||||
@@ -308,11 +336,6 @@ PRPSD_DISPATCH:
|
||||
JP Z,PRPSD_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,PRPSD_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
PRPSD_VERIFY:
|
||||
PRPSD_FORMAT:
|
||||
|
||||
@@ -78,11 +78,6 @@ RF_DISPATCH:
|
||||
JP Z,RF_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,RF_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
RF_VERIFY:
|
||||
RF_FORMAT:
|
||||
|
||||
@@ -436,10 +436,11 @@ UDEVUNK .DB "UNK$"
|
||||
; CHECK FOR VALID DRIVE LETTER
|
||||
LD A,(BL_BOOTID) ; BOOT DEVICE TO A
|
||||
PUSH AF ; SAVE BOOT DEVICE
|
||||
LD B,BF_DIOGETCNT ; HBIOS FUNC: DEVICE COUNT
|
||||
RST 08 ; CALL HBIOS, DEVICE COUNT TO B
|
||||
LD B,BF_SYSGET
|
||||
LD C,BF_SYSGET_DIOCNT
|
||||
RST 08 ; E := DISK UNIT COUNT
|
||||
POP AF ; RESTORE BOOT DEVICE
|
||||
CP B ; CHECK MAX (INDEX - COUNT)
|
||||
CP E ; CHECK MAX (INDEX - COUNT)
|
||||
JP NC,DB_NODISK ; HANDLE INVALID SELECTION
|
||||
|
||||
; SET THE BOOT UNIT AND SLICE
|
||||
@@ -451,8 +452,10 @@ UDEVUNK .DB "UNK$"
|
||||
; SENSE MEDIA
|
||||
LD A,(BL_DEVICE) ; GET DEVICE/UNIT
|
||||
LD C,A ; STORE IN C
|
||||
LD B,BF_DIOMED ; DRIVER FUNCTION = DISK MEDIA
|
||||
LD B,BF_DIOMEDIA ; DRIVER FUNCTION = DISK MEDIA
|
||||
LD E,1 ; ENABLE MEDIA CHECK/DISCOVERY
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,E ; MOVE RESULTANT MEDIA ID TO A
|
||||
OR A ; SET FLAGS
|
||||
JP Z,DB_ERR ; HANDLE ERROR
|
||||
|
||||
@@ -600,17 +603,6 @@ DB_NXTSEC:
|
||||
; READ CURRENT SECTOR TO LOAD LOCATION
|
||||
;
|
||||
DB_READSEC:
|
||||
LD HL,(BL_CURDMA) ; GET THE SECTOR DMA ADDRESS
|
||||
|
||||
#IF 0
|
||||
CALL NEWLINE
|
||||
PUSH HL
|
||||
POP BC
|
||||
CALL PRTHEXWORD
|
||||
#ENDIF
|
||||
LD B,BF_DIOSETBUF ; HBIOS FUNC: SET BUF
|
||||
RST 08 ; CALL HBIOS
|
||||
|
||||
LD A,(BL_DEVICE) ; GET ACTIVE DEVICE/UNIT BYTE
|
||||
AND $F0 ; ISOLATE DEVICE PORTION
|
||||
CP DIODEV_FD ; FLOPPY?
|
||||
@@ -624,7 +616,7 @@ DB_READSEC:
|
||||
LD E,A ; MOVE IT TO LSB
|
||||
LD D,0 ; MSB IS ALWAYS ZERO
|
||||
; SET C = DEVICE/UNIT
|
||||
LD B,BF_DIORD ; FUNCTION IN B
|
||||
LD B,BF_DIOREAD ; FUNCTION IN B
|
||||
LD A,(BL_DEVICE) ; LOAD DEVICE/UNIT VALUE
|
||||
LD C,A ; SAVE IN C
|
||||
JR DB_READSEC3 ; DISPATCH TO DRIVER
|
||||
@@ -652,7 +644,7 @@ DB_READSEC2:
|
||||
CALL ADDHLA ; ADD LU OFFSET
|
||||
; FINAL LBA IN HL:DE
|
||||
SET 7,H ; SET HI BIT TO INDICATE LBA
|
||||
LD B,BF_DIORD ; FUNCTION IN B
|
||||
LD B,BF_DIOREAD ; FUNCTION IN B
|
||||
LD A,(BL_DEVICE) ; GET THE DEVICE/UNIT VALUE
|
||||
LD C,A ; PUT IT IN C
|
||||
;
|
||||
@@ -685,16 +677,26 @@ DB_READSEC3:
|
||||
POP BC
|
||||
POP AF
|
||||
#ENDIF
|
||||
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT
|
||||
EX DE,HL ; SWAP DE/HL TO XLAT FROM OLD TO NEW CALL
|
||||
LD B,BF_DIOSEEK ; SETUP FOR NEW SEEK CALL
|
||||
RST 08 ; DO IT
|
||||
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT
|
||||
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A
|
||||
LD HL,(BL_CURDMA) ; GET BUFFER ADDRESS
|
||||
LD DE,1 ; TRANSFER ONE SECTOR
|
||||
RST 08
|
||||
OR A ; SET FLAGS BASED ON RESULT
|
||||
OR A ; SET FLAGS BASED ON RESULT
|
||||
RET
|
||||
;
|
||||
; PRINT LIST OF ALL DRIVES
|
||||
;
|
||||
PRTALL:
|
||||
;
|
||||
LD B,BF_DIOGETCNT ; HBIOS FUNC: DEVICE COUNT
|
||||
RST 08 ; CALL HBIOS
|
||||
LD B,BF_SYSGET
|
||||
LD C,BF_SYSGET_DIOCNT
|
||||
RST 08 ; E := DISK UNIT COUNT
|
||||
LD B,E ; COUNT TO B
|
||||
LD A,B ; COUNT TO A
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; BAIL OUT IF ZERO
|
||||
@@ -710,10 +712,8 @@ PRTALL1:
|
||||
CALL COUT ; PRINT IT
|
||||
CALL PC_SPACE ; SPACING
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
LD B,BF_DIOGETINF ; HBIOS FUNC: DEVICE INFO
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
|
||||
RST 08 ; CALL HBIOS
|
||||
;LD D,C ; DEVICE/UNIT TO D
|
||||
;LD E,0 ; LU IS ZERO
|
||||
CALL PRTDRV ; PRINT IT
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
INC C ; BUMP INDEX
|
||||
@@ -875,11 +875,79 @@ BOOT:
|
||||
.DB 00H, 00H, 80H, 80H, 094H, 09DH, 09DH, 09FH
|
||||
.ENDIF
|
||||
;
|
||||
#DEFINE CIOMODE_HBIOS
|
||||
#DEFINE DSKY_KBD
|
||||
#DEFINE USEDELAY
|
||||
#INCLUDE "util.asm"
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#DEFINE DSKY_KBD
|
||||
#INCLUDE "dsky.asm"
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; CONSOLE CHARACTER I/O HELPER ROUTINES (REGISTERS PRESERVED)
|
||||
;==================================================================================================
|
||||
;
|
||||
; OUTPUT CHARACTER FROM A
|
||||
;
|
||||
COUT:
|
||||
; SAVE ALL INCOMING REGISTERS
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; OUTPUT CHARACTER TO CONSOLE VIA HBIOS
|
||||
LD E,A ; OUTPUT CHAR TO E
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR
|
||||
RST 08 ; HBIOS OUTPUTS CHARACTDR
|
||||
;
|
||||
; RESTORE ALL REGISTERS
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; INPUT CHARACTER TO A
|
||||
;
|
||||
CIN:
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT)
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; INPUT CHARACTER FROM CONSOLE VIA HBIOS
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR
|
||||
RST 08 ; HBIOS READS CHARACTDR
|
||||
LD A,E ; MOVE CHARACTER TO A FOR RETURN
|
||||
;
|
||||
; RESTORE REGISTERS (AF IS OUTPUT)
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING)
|
||||
;
|
||||
CST:
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT)
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
;
|
||||
; GET CONSOLE INPUT STATUS VIA HBIOS
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS
|
||||
RST 08 ; HBIOS RETURNS STATUS IN A
|
||||
;
|
||||
; RESTORE REGISTERS (AF IS OUTPUT)
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; READ A CONSOLE CHARACTER AND CONVERT TO UPPER CASE
|
||||
;
|
||||
CINUC:
|
||||
|
||||
@@ -453,11 +453,6 @@ SD_DISPATCH:
|
||||
JP Z,SD_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,SD_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
DEC A
|
||||
JP Z,NDIO_INFO ; SUB-FUNC 15: QUERY DISK SYSTEM INFO
|
||||
;
|
||||
SD_VERIFY:
|
||||
SD_FORMAT:
|
||||
@@ -526,7 +521,7 @@ SD_MEDIA:
|
||||
OR A ; SET FLAGS
|
||||
JR Z,SD_MEDIA2 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
;
|
||||
IDE_DPTR(SD_STAT) ; POINT TO UNIT STATUS
|
||||
SD_DPTR(SD_STAT) ; POINT TO UNIT STATUS
|
||||
LD A,(HL) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,SD_MEDIA1 ; ERROR ACTIVE, TO RIGHT TO RESET
|
||||
|
||||
@@ -104,12 +104,6 @@ SDMODE_UART .EQU 5 ; SD INTERFACE VIA UART
|
||||
SDMODE_DSD .EQU 6 ; DUAL SD
|
||||
SDMODE_MK4 .EQU 7 ; MARK IV
|
||||
;
|
||||
; EMULATION TYPES
|
||||
;
|
||||
EMUTYP_NONE .EQU 0
|
||||
EMUTYP_TTY .EQU 1
|
||||
EMUTYP_ANSI .EQU 2
|
||||
;
|
||||
#INCLUDE "build.inc" ; INCLUDE USER CONFIG, ADD VARIANT, TIMESTAMP, & ROMSIZE
|
||||
;
|
||||
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4))
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
;
|
||||
; tty_dochar - added setup in HL of position data before call to write
|
||||
;==================================================================================================
|
||||
; TTY EMULATION MODULE
|
||||
;==================================================================================================
|
||||
@@ -8,13 +7,26 @@
|
||||
; - SOME FUNCTIONS ARE NOT IMPLEMENTED!!!
|
||||
;
|
||||
TTY_INIT:
|
||||
PRTS("TTY: RESET$")
|
||||
; SAVE INCOMING VDA DISPATCH ADDRESS
|
||||
LD (EMU_VDADISPADR),DE ; RECORD NEW VDA DISPATCH ADDRESS
|
||||
;
|
||||
JR TTY_INI ; REUSE THE INI FUNCTION BELOW
|
||||
; QUERY THE VIDEO DRIVER FOR SCREEN DIMENSIONS
|
||||
LD B,BF_VDAQRY ; FUNCTION IS QUERY
|
||||
LD HL,0 ; WE DO NOT WANT A COPY OF THE CHARACTER BITMAP DATA
|
||||
CALL EMU_VDADISP ; PERFORM THE QUERY FUNCTION
|
||||
LD (TTY_DIM),DE ; SAVE THE SCREEN DIMENSIONS RETURNED
|
||||
;
|
||||
LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0
|
||||
LD (TTY_POS),DE ; SAVE CURSOR POSITION
|
||||
;
|
||||
LD DE,TTY_DISPATCH ; RETURN OUR DISPATCH ADDRESS
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_DISPATCH:
|
||||
LD (TTY_CIODEV),A ; *DEBUG*
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,TTY_IN ; $30
|
||||
@@ -25,11 +37,11 @@ TTY_DISPATCH:
|
||||
DEC A
|
||||
JR Z,TTY_OST ; $33
|
||||
DEC A
|
||||
JR Z,TTY_CFG ; $34
|
||||
CP 8
|
||||
JR Z,TTY_INI ; $38
|
||||
CP 9
|
||||
JR Z,TTY_QRY ; $39
|
||||
JR Z,TTY_INITDEV ; $34
|
||||
DEC A
|
||||
JR Z,TTY_QUERY ; $35
|
||||
DEC A
|
||||
JR Z,TTY_DEVICE ; $36
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
@@ -60,25 +72,23 @@ TTY_OST:
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_CFG:
|
||||
TTY_INITDEV:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_QUERY:
|
||||
CALL PANIC ; NOT IMPLEMENTED
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_INI:
|
||||
LD B,BF_VDAQRY ; FUNCTION IS QUERY
|
||||
LD HL,0 ; WE DO NOT WANT A COPY OF THE CHARACTER BITMAP DATA
|
||||
CALL EMU_VDADISP ; PERFORM THE QUERY FUNCTION
|
||||
LD (TTY_DIM),DE ; SAVE THE SCREEN DIMENSIONS RETURNED
|
||||
LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0
|
||||
LD (TTY_POS),DE ; SAVE CURSOR POSITION
|
||||
LD B,BF_VDARES ; SET FUNCTION TO RESET
|
||||
JP EMU_VDADISP ; RESET VDA AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_QRY:
|
||||
TTY_DEVICE:
|
||||
;LD D,CIODEV_VDA ; D := DEVICE TYPE
|
||||
LD A,(TTY_CIODEV) ; GET THE CURRENT CIO DEVICE *DEBUG*
|
||||
LD D,A ; AND PASS BACK IN D *DEBUG*
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
@@ -159,4 +169,6 @@ TTY_ROW .DB 0 ; CURRENT ROW - 0 BASED
|
||||
;
|
||||
TTY_DIM:
|
||||
TTY_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN
|
||||
TTY_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN
|
||||
TTY_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN
|
||||
;
|
||||
TTY_CIODEV .DB 0 ; *DEBUG*
|
||||
|
||||
@@ -106,8 +106,22 @@ UART3_EFR .EQU UART3IOB + 2 ; ENHANCED FEATURE (WHEN LCR = $BF)
|
||||
; C: CHARACTER (IN/OUT)
|
||||
; E: DEVICE/UNIT (IN)
|
||||
;
|
||||
;
|
||||
UART_INIT:
|
||||
;
|
||||
; SETUP THE DISPATCH TABLE ENTRIES
|
||||
;
|
||||
LD B,UARTCNT ; LOOP CONTROL
|
||||
LD C,0 ; PHYSICAL UNIT INDEX
|
||||
UART_INIT0:
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
LD B,C ; PHYSICAL UNIT
|
||||
LD C,CIODEV_UART ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, BC IS NOT DESTROYED
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
INC C ; NEXT PHYSICAL UNIT
|
||||
DJNZ UART_INIT0 ; LOOP UNTIL DONE
|
||||
;
|
||||
#IF (UARTCNT >= 1)
|
||||
CALL UART0_INIT
|
||||
#ENDIF
|
||||
@@ -180,15 +194,21 @@ UART0_INIT:
|
||||
;
|
||||
;
|
||||
UART0_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JP Z,UART0_IN
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JP Z,UART0_IN ; BF_CIOIN
|
||||
DEC A
|
||||
JP Z,UART0_OUT
|
||||
JP Z,UART0_OUT ; BF_CIOOUT
|
||||
DEC A
|
||||
JP Z,UART0_IST
|
||||
JP Z,UART0_IST ; BF_CIOIST
|
||||
DEC A
|
||||
JP Z,UART0_OST
|
||||
JP Z,UART0_OST ; BF_CIOOST
|
||||
DEC A
|
||||
JP Z,UART0_INITDEV ; BF_CIOINIT
|
||||
DEC A
|
||||
JP Z,UART0_QUERY ; BF_CIOQUERY
|
||||
DEC A
|
||||
JP Z,UART0_DEVICE ; BF_CIODEVICE
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
@@ -229,6 +249,18 @@ UART0_OST:
|
||||
INC A ; SIGNAL BUFFER EMPTY, A = 1
|
||||
RET
|
||||
;
|
||||
UART0_INITDEV:
|
||||
UART0_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
UART0_DEVICE:
|
||||
LD D,CIODEV_UART ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
@@ -267,15 +299,21 @@ UART1_INIT:
|
||||
;
|
||||
;
|
||||
UART1_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JP Z,UART1_IN
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JP Z,UART1_IN ; BF_CIOIN
|
||||
DEC A
|
||||
JP Z,UART1_OUT
|
||||
JP Z,UART1_OUT ; BF_CIOOUT
|
||||
DEC A
|
||||
JP Z,UART1_IST
|
||||
JP Z,UART1_IST ; BF_CIOIST
|
||||
DEC A
|
||||
JP Z,UART1_OST
|
||||
JP Z,UART1_OST ; BF_CIOOST
|
||||
DEC A
|
||||
JP Z,UART1_INITDEV ; BF_CIOINIT
|
||||
DEC A
|
||||
JP Z,UART1_QUERY ; BF_CIOQUERY
|
||||
DEC A
|
||||
JP Z,UART1_DEVICE ; BF_CIODEVICE
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
@@ -316,6 +354,18 @@ UART1_OST:
|
||||
INC A ; SIGNAL BUFFER EMPTY, A = 1
|
||||
RET
|
||||
;
|
||||
UART1_INITDEV:
|
||||
UART1_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
UART1_DEVICE:
|
||||
LD D,CIODEV_UART ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
; UART INITIALIZATION ROUTINE
|
||||
|
||||
@@ -9,8 +9,8 @@ BF_CIOIST .EQU BF_CIO + 3 ; CHARACTER INPUT STATUS
|
||||
BF_CIOOST .EQU BF_CIO + 4 ; CHARACTER OUTPUT STATUS
|
||||
;
|
||||
BF_DIO .EQU $40
|
||||
BF_DIORD .EQU BF_DIO + 2 ; DISK READ
|
||||
BF_DIOWR .EQU BF_DIO + 3 ; DISK WRITE
|
||||
BF_DIOREAD .EQU BF_DIO + 2 ; DISK READ
|
||||
BF_DIOWRITE .EQU BF_DIO + 3 ; DISK WRITE
|
||||
;
|
||||
; MEMORY BANK CONFIGURATION
|
||||
;
|
||||
|
||||
@@ -326,13 +326,23 @@ PANIC:
|
||||
LD DE,STR_PANIC
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
JR REGDMP ; DUMP REGISTERS AND RETURN
|
||||
CALL _REGDMP ; DUMP REGISTERS
|
||||
CALL CONTINUE ; CHECK W/ USER
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
REGDMP:
|
||||
CALL _REGDMP
|
||||
RET
|
||||
;
|
||||
_REGDMP:
|
||||
EX (SP),HL ; RET ADR TO HL, SAVE HL ON TOS
|
||||
LD (REGDMP_PC),HL ; SAVE RET IS PC REG VALUE, SAVE IT
|
||||
LD (REGDMP_RET),HL ; SAVE RETURN ADDRESS
|
||||
POP HL ; RESTORE HL AND BURN STACK ENTRY
|
||||
|
||||
EX (SP),HL ; PC TO HL, SAVE HL ON TOS
|
||||
LD (REGDMP_PC),HL ; SAVE PC VALUE
|
||||
EX (SP),HL ; BACK THE WAY IT WAS
|
||||
|
||||
LD (UTSTKSAV),SP ; SAVE ORIGINAL STACK POINTER
|
||||
@@ -383,7 +393,9 @@ REGDMP:
|
||||
POP AF
|
||||
|
||||
LD SP,(UTSTKSAV) ; BACK TO ORIGINAL STACK FRAME
|
||||
RET
|
||||
|
||||
JP $FFFF ; RETURN, $FFFF IS DYNAMICALLY UPDATED
|
||||
REGDMP_RET .EQU $-2 ; RETURN ADDRESS GOES HERE
|
||||
;
|
||||
REGDMP_PC .DW 0
|
||||
;
|
||||
@@ -412,160 +424,7 @@ CONTINUE3:
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; CONSOLE CHARACTER I/O HELPER ROUTINES (REGISTERS PRESERVED)
|
||||
;==================================================================================================
|
||||
;
|
||||
; OUTPUT CHARACTER FROM A
|
||||
COUT:
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
#IF (PLATFORM == PLT_UNA)
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD E,A
|
||||
LD BC,$12
|
||||
RST 08
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_HBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD E,A
|
||||
LD BC,$12
|
||||
RST 08
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD E,A
|
||||
LD A,(HCB + HCB_CONDEV)
|
||||
LD C,A
|
||||
LD B,BF_CIOOUT
|
||||
;CALL HB_DISPATCH
|
||||
CALL CIO_DISPATCH
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_HBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD E,A
|
||||
LD C,CIODEV_CONSOLE
|
||||
LD B,BF_CIOOUT
|
||||
RST 08
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_CBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD C,A
|
||||
CALL CBIOS_CONOUT
|
||||
#ENDIF
|
||||
#IFNDEF CIOMODE_NONDOS
|
||||
LD E,A
|
||||
LD C,03H
|
||||
CALL 0005H
|
||||
#ENDIF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; INPUT CHARACTER TO A
|
||||
;
|
||||
CIN:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
#IF (PLATFORM == PLT_UNA)
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD BC,$11
|
||||
RST 08
|
||||
LD A,E
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_HBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD BC,$11
|
||||
RST 08
|
||||
LD A,E
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD A,(HCB + HCB_CONDEV)
|
||||
LD C,A
|
||||
LD B,BF_CIOIN
|
||||
;CALL HB_DISPATCH
|
||||
CALL CIO_DISPATCH
|
||||
LD A,E
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_HBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD C,CIODEV_CONSOLE
|
||||
LD B,BF_CIOIN
|
||||
RST 08
|
||||
LD A,E
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_CBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
CALL CBIOS_CONIN
|
||||
#ENDIF
|
||||
#IFNDEF CIOMODE_NONDOS
|
||||
LD C,01H
|
||||
CALL 0005H
|
||||
#ENDIF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING)
|
||||
;
|
||||
CST:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
#IF (PLATFORM == PLT_UNA)
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD BC,$13
|
||||
RST 08
|
||||
LD A,E
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_HBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD BC,$13
|
||||
RST 08
|
||||
LD A,E
|
||||
#ENDIF
|
||||
#ELSE
|
||||
#IFDEF CIOMODE_CONSOLE
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD B,BF_CIOIST
|
||||
LD A,(HCB + HCB_CONDEV)
|
||||
LD C,A
|
||||
;CALL HB_DISPATCH
|
||||
CALL CIO_DISPATCH
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_HBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
LD B,BF_CIOIST
|
||||
LD C,CIODEV_CONSOLE
|
||||
RST 08
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
#IFDEF CIOMODE_CBIOS
|
||||
#DEFINE CIOMODE_NONDOS
|
||||
CALL CBIOS_CONST
|
||||
#ENDIF
|
||||
#IFNDEF CIOMODE_NONDOS
|
||||
LD C,0BH
|
||||
CALL 0005H
|
||||
#ENDIF
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
STR_PANIC .DB "\r\n\r\n>>> PANIC: $"
|
||||
STR_TSTPT .TEXT "\r\n+++ TSTPT: $"
|
||||
@@ -1013,259 +872,3 @@ ST32:
|
||||
UTSTKSAV .DW 0
|
||||
.FILL $FF,64 ; 32 LEVEL PRIVATE STACK SPACE
|
||||
UTPRVSTK .EQU $
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY KEYBOARD ROUTINES
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
|
||||
PPIA .EQU PPIBASE + 0 ; PORT A
|
||||
PPIB .EQU PPIBASE + 1 ; PORT B
|
||||
PPIC .EQU PPIBASE + 2 ; PORT C
|
||||
PPIX .EQU PPIBASE + 3 ; PPI CONTROL PORT
|
||||
|
||||
;
|
||||
; _____C0______C1______C2______C3__
|
||||
;B5 | $20 D $60 E $A0 F $E0 BO
|
||||
;B4 | $10 A $50 B $90 C $D0 GO
|
||||
;B3 | $08 7 $48 8 $88 9 $C8 EX
|
||||
;B2 | $04 4 $44 5 $84 6 $C4 DE
|
||||
;B1 | $02 1 $42 2 $82 3 $C2 EN
|
||||
;B0 | $01 FW $41 0 $81 BK $C1 CL
|
||||
;
|
||||
KY_0 .EQU 000H
|
||||
KY_1 .EQU 001H
|
||||
KY_2 .EQU 002H
|
||||
KY_3 .EQU 003H
|
||||
KY_4 .EQU 004H
|
||||
KY_5 .EQU 005H
|
||||
KY_6 .EQU 006H
|
||||
KY_7 .EQU 007H
|
||||
KY_8 .EQU 008H
|
||||
KY_9 .EQU 009H
|
||||
KY_A .EQU 00AH
|
||||
KY_B .EQU 00BH
|
||||
KY_C .EQU 00CH
|
||||
KY_D .EQU 00DH
|
||||
KY_E .EQU 00EH
|
||||
KY_F .EQU 00FH
|
||||
KY_FW .EQU 010H ; FORWARD
|
||||
KY_BK .EQU 011H ; BACKWARD
|
||||
KY_CL .EQU 012H ; CLEAR
|
||||
KY_EN .EQU 013H ; ENTER
|
||||
KY_DE .EQU 014H ; DEPOSIT
|
||||
KY_EX .EQU 015H ; EXAMINE
|
||||
KY_GO .EQU 016H ; GO
|
||||
KY_BO .EQU 017H ; BOOT
|
||||
;
|
||||
;__DSKY_INIT_________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
DSKY_INIT:
|
||||
LD A,82H
|
||||
OUT (PPIX),A
|
||||
LD A,30H ;disable /CS on PPISD card(s)
|
||||
OUT (PPIC),A
|
||||
XOR A
|
||||
LD (KY_BUF),A
|
||||
RET
|
||||
#IFDEF DSKY_KBD
|
||||
;
|
||||
;__KY_STAT___________________________________________________________________________________________
|
||||
;
|
||||
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_STAT:
|
||||
; IF WE ALREADY HAVE A KEY, RETURN WITH NZ
|
||||
LD A,(KY_BUF)
|
||||
OR A
|
||||
RET NZ
|
||||
; SCAN FOR A KEYPRESS, A=0 NO DATA OR A=RAW BYTE
|
||||
CALL KY_SCAN ; SCAN KB ONCE
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; NOTHING FOUND, GET OUT
|
||||
LD (KY_BUF),A ; SAVE RAW KEYCODE
|
||||
RET ; RETURN
|
||||
;
|
||||
;__KY_GET____________________________________________________________________________________________
|
||||
;
|
||||
; GET A SINGLE KEY (WAIT FOR ONE IF NECESSARY)
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_GET:
|
||||
; SEE IF WE ALREADY HAVE A KEY SAVED, GO TO DECODE IF SO
|
||||
LD A,(KY_BUF)
|
||||
OR A
|
||||
JR NZ,KY_DECODE
|
||||
; NO KEY SAVED, WAIT FOR ONE
|
||||
KY_STATLOOP:
|
||||
CALL KY_STAT
|
||||
OR A
|
||||
JR Z,KY_STATLOOP
|
||||
; DECODE THE RAW VALUE
|
||||
KY_DECODE:
|
||||
LD D,00H
|
||||
LD HL,KY_KEYMAP ; POINT TO BEGINNING OF TABLE
|
||||
KY_GET_LOOP:
|
||||
CP (HL) ; MATCH?
|
||||
JR Z,KY_GET_DONE ; FOUND, DONE
|
||||
INC HL
|
||||
INC D ; D + 1
|
||||
JR NZ,KY_GET_LOOP ; NOT FOUND, LOOP UNTIL EOT
|
||||
KY_GET_DONE:
|
||||
; CLEAR OUT KEY_BUF
|
||||
XOR A
|
||||
LD (KY_BUF),A
|
||||
; RETURN THE INDEX POSITION WHERE THE RAW VALUE WAS FOUND
|
||||
LD A,D
|
||||
RET
|
||||
;
|
||||
;__KY_SCAN____________________________________________________________________________________________
|
||||
;
|
||||
; SCAN KEYBOARD MATRIX FOR AN INPUT
|
||||
;____________________________________________________________________________________________________
|
||||
;
|
||||
KY_SCAN:
|
||||
LD C,0000H
|
||||
LD A,41H | 30H ; SCAN COL ONE
|
||||
OUT (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
LD A,00H ; RETURN NULL
|
||||
RET ; EXIT
|
||||
|
||||
KY_SCAN_FOUND:
|
||||
AND 3FH ; CLEAR TOP TWO BITS
|
||||
OR C ; ADD IN ROW BITS
|
||||
LD C,A ; STORE VALUE
|
||||
|
||||
; WAIT FOR KEY TO BE RELEASED
|
||||
LD A,4FH | 30H ; SCAN ALL COL LINES
|
||||
OUT (PPIC),A ; SEND TO COLUMN LINES
|
||||
CALL DLY2 ; DEBOUNCE
|
||||
KY_CLEAR_LOOP: ; WAIT FOR KEY TO CLEAR
|
||||
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 (PPIC),A ; SEND TO COLUMN LINES
|
||||
|
||||
LD A,C ; RESTORE VALUE
|
||||
RET
|
||||
;
|
||||
;_KEYMAP_TABLE_____________________________________________________________________________________________________________
|
||||
;
|
||||
KY_KEYMAP:
|
||||
; 0 1 2 3 4 5 6 7
|
||||
.DB 041H,002H,042H,082H,004H,044H,084H,008H
|
||||
; 8 9 A B C D E F
|
||||
.DB 048H,088H,010H,050H,090H,020H,060H,0A0H
|
||||
; FW BK CL EN DE EX GO BO
|
||||
.DB 001H,081H,0C1H,0C2H,0C4H,0C8H,0D0H,0E0H
|
||||
;
|
||||
#ENDIF ; DSKY_KBD
|
||||
;
|
||||
;==================================================================================================
|
||||
; DSKY HEX DISPLAY
|
||||
;==================================================================================================
|
||||
;
|
||||
DSKY_HEXOUT:
|
||||
LD B,DSKY_HEXBUFLEN
|
||||
LD HL,DSKY_BUF
|
||||
LD DE,DSKY_HEXBUF
|
||||
DSKY_HEXOUT1:
|
||||
LD A,(DE) ; FIRST NIBBLE
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
SRL A
|
||||
LD (HL),A
|
||||
INC HL
|
||||
LD A,(DE) ; SECOND NIBBLE
|
||||
AND 0FH
|
||||
LD (HL),A
|
||||
INC HL
|
||||
INC DE ; NEXT BYTE
|
||||
DJNZ DSKY_HEXOUT1
|
||||
|
||||
LD A,82H ; SETUP PPI
|
||||
OUT (PPIX),A
|
||||
CALL DSKY_COFF
|
||||
LD A,0D0H ; 7218 -> (DATA COMING, HEXA DECODE)
|
||||
OUT (PPIA),A
|
||||
CALL DSKY_STROBEC
|
||||
|
||||
LD HL,DSKY_BUF ; POINT TO START OF BUF
|
||||
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
|
||||
LD C,PPIA
|
||||
DSKY_HEXOUT2:
|
||||
OUTI
|
||||
JP Z,DSKY_STROBE ; DO FINAL STROBE AND RETURN
|
||||
CALL DSKY_STROBE
|
||||
JR DSKY_HEXOUT2
|
||||
|
||||
DSKY_STROBEC:
|
||||
LD A,80H | 30H
|
||||
JP DSKY_STROBE0
|
||||
|
||||
DSKY_STROBE:
|
||||
LD A,00H | 30H ; SET WRITE STROBE
|
||||
|
||||
DSKY_STROBE0:
|
||||
OUT (PPIC),A ; OUT TO PORTC
|
||||
CALL DLY2 ; DELAY
|
||||
DSKY_COFF
|
||||
LD A,40H | 30H ; SET CONTROL PORT OFF
|
||||
OUT (PPIC),A ; OUT TO PORTC
|
||||
; CALL DSKY_DELAY ; WAIT
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
KY_BUF .DB 0
|
||||
DSKY_BUF: .FILL 8,0
|
||||
DSKY_BUFLEN .EQU $ - DSKY_BUF
|
||||
DSKY_HEXBUF .FILL 4,0
|
||||
DSKY_HEXBUFLEN .EQU $ - DSKY_HEXBUF
|
||||
;
|
||||
;
|
||||
#ENDIF
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
; - IMPLEMENT ALTERNATE DISPLAY MODES?
|
||||
;
|
||||
;======================================================================
|
||||
; CVDU DRIVER - CONSTANTS
|
||||
; VDU DRIVER - CONSTANTS
|
||||
;======================================================================
|
||||
;
|
||||
VDU_RAMRD .EQU 0F0h ; READ VDU
|
||||
@@ -33,52 +33,32 @@ VDU_INIT:
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
CALL VDU_CRTINIT ; INIT SY6845 VDU CHIP
|
||||
;
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_VDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
VDU_RESET:
|
||||
LD DE,0
|
||||
LD (VDU_OFFSET),DE
|
||||
CALL VDU_XY
|
||||
LD A,' '
|
||||
LD DE,1024*16
|
||||
CALL VDU_FILL
|
||||
XOR A
|
||||
RET
|
||||
CALL TSTPT ; *DEBUG*
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
LD E,0 ; VIDEO MODE = 0
|
||||
JP VDU_VDAINI
|
||||
;
|
||||
;======================================================================
|
||||
; VDU DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
VDU_DISPCIO:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,VDU_CIOIN ; $00
|
||||
DEC A
|
||||
JR Z,VDU_CIOOUT ; $01
|
||||
DEC A
|
||||
JR Z,VDU_CIOIST ; $02
|
||||
DEC A
|
||||
JR Z,VDU_CIOOST ; $03
|
||||
CALL PANIC
|
||||
;
|
||||
VDU_CIOIN:
|
||||
JP PPK_READ ; CHAIN TO KEYBOARD DRIVER
|
||||
;
|
||||
VDU_CIOIST:
|
||||
JP PPK_STAT ; CHAIN TO KEYBOARD DRIVER
|
||||
;
|
||||
VDU_CIOOUT:
|
||||
JP VDU_VDAWRC ; WRITE CHARACTER
|
||||
;
|
||||
VDU_CIOOST:
|
||||
XOR A ; A := 0
|
||||
INC A ; A := 1, SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
JP PANIC
|
||||
VDU_CIODISPADR .EQU $ - 2
|
||||
;
|
||||
;======================================================================
|
||||
; VDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
VDU_DISPVDA:
|
||||
VDU_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
|
||||
@@ -112,7 +92,21 @@ VDU_DISPVDA:
|
||||
CALL PANIC
|
||||
|
||||
VDU_VDAINI:
|
||||
JR VDU_INIT ; INITIALIZE
|
||||
; RESET VDA
|
||||
PUSH DE ; SAVE EMULATION TYPE (IN D)
|
||||
CALL VDU_VDARES ; RESET VDA
|
||||
POP DE ; RECOVER EMULATION TYPE
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD C,D ; EMULATION MODE TO C
|
||||
LD DE,VDU_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL TSTPT ; *DEBUG*
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
LD (VDU_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
|
||||
CALL TSTPT ; *DEBUG*
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VDU_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
@@ -122,7 +116,16 @@ VDU_VDAQRY:
|
||||
RET
|
||||
|
||||
VDU_VDARES:
|
||||
JR VDU_RESET ; DO THE RESET
|
||||
;JR VDU_RESET ; DO THE RESET
|
||||
LD DE,0
|
||||
LD (VDU_OFFSET),DE
|
||||
CALL VDU_XY
|
||||
LD A,' '
|
||||
LD DE,1024*16
|
||||
CALL VDU_FILL
|
||||
|
||||
XOR A
|
||||
RET
|
||||
|
||||
VDU_VDASCS:
|
||||
CALL PANIC ; NOT IMPLEMENTED (YET)
|
||||
@@ -154,7 +157,7 @@ VDU_VDAFIL:
|
||||
RET
|
||||
|
||||
VDU_VDACPY:
|
||||
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS CVDU_POS
|
||||
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS VDU_POS
|
||||
PUSH HL ; SAVE LENGTH
|
||||
CALL VDU_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL
|
||||
POP BC ; RECOVER LENGTH IN BC
|
||||
@@ -180,7 +183,7 @@ VDU_VDASCR1:
|
||||
JR VDU_VDASCR ; LOOP
|
||||
;
|
||||
;======================================================================
|
||||
; CVDU DRIVER - PRIVATE DRIVER FUNCTIONS
|
||||
; VDU DRIVER - PRIVATE DRIVER FUNCTIONS
|
||||
;======================================================================
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
@@ -201,7 +204,7 @@ VDU_WAITRDY:
|
||||
;
|
||||
VDU_WRREG:
|
||||
PUSH AF ; SAVE VALUE TO WRITE
|
||||
LD A,C ; SET A TO CVDU REGISTER TO SELECT
|
||||
LD A,C ; SET A TO VDU REGISTER TO SELECT
|
||||
OUT (VDU_REG),A ; WRITE IT TO SELECT THE REGISTER
|
||||
POP AF ; RECOVER VALUE TO WRITE
|
||||
OUT (VDU_DATA),A ; WRITE IT
|
||||
@@ -210,7 +213,7 @@ VDU_WRREG:
|
||||
VDU_WRREGX:
|
||||
LD A,H ; SETUP MSB TO WRITE
|
||||
CALL VDU_WRREG ; DO IT
|
||||
INC C ; NEXT CVDU REGISTER
|
||||
INC C ; NEXT VDU REGISTER
|
||||
LD A,L ; SETUP LSB TO WRITE
|
||||
JR VDU_WRREG ; DO IT & RETURN
|
||||
;
|
||||
@@ -222,7 +225,7 @@ VDU_WRREGX:
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VDU_RDREG:
|
||||
LD A,C ; SET A TO CVDU REGISTER TO SELECT
|
||||
LD A,C ; SET A TO VDU REGISTER TO SELECT
|
||||
OUT (VDU_REG),A ; WRITE IT TO SELECT THE REGISTER
|
||||
IN A,(VDU_DATA) ; READ IT
|
||||
RET
|
||||
|
||||
Reference in New Issue
Block a user