mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:13:13 -06:00
Add Device Summary Display
This commit is contained in:
@@ -2,88 +2,114 @@
|
||||
HBIOS Management Functions
|
||||
==========================
|
||||
|
||||
GET ($05):
|
||||
BC=Function/Subfunction A=Result
|
||||
GET ($07):
|
||||
BC=Function/Subfunction A=Result
|
||||
|
||||
Subfunctions:
|
||||
|
||||
CIOCNT ($00):
|
||||
BC=Function/Subfunction A=Result
|
||||
E=Serial Unit Count
|
||||
BC=Function/Subfunction A=Result
|
||||
E=Serial Unit Count
|
||||
|
||||
DIOCNT ($10):
|
||||
BC=Function/Subfunction A=Result
|
||||
E=Disk Unit Count
|
||||
BC=Function/Subfunction A=Result
|
||||
E=Disk Unit Count
|
||||
|
||||
BIOSVER ($F0):
|
||||
BC=Function/Subfunction A=Result
|
||||
DE=BIOS Version
|
||||
L=Platform
|
||||
VDACNT ($40):
|
||||
BC=Function/Subfunction A=Result
|
||||
E=Video Unit Count
|
||||
|
||||
SET ($06):
|
||||
BC=Function/Subfunction A=Result
|
||||
BOOTINFO ($E0):
|
||||
BC=Function/Subfunction A=Result
|
||||
L=Boot Bank Id
|
||||
DE=Boot Volume (Disk Unit/Slice)
|
||||
|
||||
CPUINFO ($F0):
|
||||
BC=Function/Subfunction A=Result
|
||||
H=Z80 CPU Variant
|
||||
L=CPU Speed in MHz
|
||||
DE=CPU Speed in KHz
|
||||
|
||||
MEMINFO ($F1):
|
||||
BC=Function/Subfunction A=Result
|
||||
D=# ROM Banks
|
||||
E=# RAM Banks
|
||||
|
||||
BNKINFO ($F2):
|
||||
BC=Function/Subfunction A=Result
|
||||
D=BIOS Bank Id
|
||||
E=User Bank Id
|
||||
|
||||
SET ($08):
|
||||
BC=Function/Subfunction A=Result
|
||||
|
||||
BOOTINFO ($E0):
|
||||
BC=Function/Subfunction A=Result
|
||||
L=Boot Bank Id
|
||||
DE=Boot Volume (Disk Unit/Slice)
|
||||
|
||||
================
|
||||
Serial Functions
|
||||
================
|
||||
|
||||
IN ($00):
|
||||
BC=Function/Unit A=Result
|
||||
E=Byte Input
|
||||
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
|
||||
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.
|
||||
Wait for device to be ready to send a character, then send the character specified in E.
|
||||
|
||||
IST ($02):
|
||||
BC=Function/Unit A=Result
|
||||
*E=# Bytes Pending
|
||||
BC=Function/Unit A=Result
|
||||
*E=# Bytes Pending
|
||||
|
||||
OST ($03):
|
||||
BC=Function/Unit A=Result
|
||||
*E=# Buffer Bytes Available
|
||||
BC=Function/Unit A=Result
|
||||
*E=# Buffer Bytes Available
|
||||
|
||||
INIT ($04):
|
||||
BC=Function/Unit A=Result
|
||||
BC=Function/Unit A=Result
|
||||
DE=Line Characteristics
|
||||
L=Terminal Type
|
||||
|
||||
QUERY ($05)
|
||||
BC=Function/Unit A=Result
|
||||
DE=Line Characteristics
|
||||
BC=Function/Unit A=Result
|
||||
DE=Line Characteristics (Baud, Flow Control, etc.)
|
||||
H=Device Type (RS-232, Terminal, etc.)
|
||||
L=Terminal Type (TTY, VT-102, etc.)
|
||||
|
||||
DEVICE ($06):
|
||||
BC=Function/Unit A=Result
|
||||
D=Device Type
|
||||
E=Physical Unit
|
||||
BC=Function/Unit A=Result
|
||||
D=Device Type
|
||||
E=Device Number
|
||||
H=Media Type (RS-232, Terminal, etc.)
|
||||
L=Video Unit Id (if Media Type == VDA)
|
||||
|
||||
==============
|
||||
Disk Functions
|
||||
==============
|
||||
|
||||
STATUS ($10):
|
||||
BC=Function/Unit A=Result
|
||||
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
|
||||
|
||||
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
|
||||
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
|
||||
@@ -92,7 +118,7 @@ SEEK ($12):
|
||||
Physical seek is typically deferred until subsequent I/O operation.
|
||||
|
||||
READ ($13) / WRITE ($14) / VERIFY ($15):
|
||||
BC=Function/Unit A=Result
|
||||
BC=Function/Unit A=Result
|
||||
HL=Buffer Address
|
||||
E=Block Count
|
||||
|
||||
@@ -101,7 +127,7 @@ READ ($13) / WRITE ($14) / VERIFY ($15):
|
||||
target sector is sector where error occurred.
|
||||
|
||||
FORMAT ($16):
|
||||
BC=Function/Unit A=Result
|
||||
BC=Function/Unit A=Result
|
||||
CHS: D=Head, HL=Cylinder
|
||||
E=Fill Byte
|
||||
|
||||
@@ -112,87 +138,151 @@ FORMAT ($16):
|
||||
*** Need to specify interleave/sector id's somehow.
|
||||
|
||||
DEVICE ($17)
|
||||
BC=Function/Unit A=Result
|
||||
D=Device Type
|
||||
E=Physical Unit
|
||||
BC=Function/Unit A=Result
|
||||
D=Device Type (MD, FD, IDE, etc.)
|
||||
E=Device Number (0..n)
|
||||
C=Disk Attributes
|
||||
|
||||
Report the device type (Floppy, IDE, SD, etc.) and physical unit number. Call
|
||||
Report the Device Type (Floppy, IDE, SD, etc.) and Device 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.
|
||||
|
||||
Disk Device Attribute Byte:
|
||||
7: 1=Floppy, 0=Hard Disk (or similar, e.g. CF, SD, RAM)
|
||||
|
||||
If Floppy:
|
||||
6-5: Form Factor (0=8", 1=5.25", 2=3.5", 3=Other)
|
||||
4: Sides (0=SS, 1=DS)
|
||||
3-2: Density (0=SD, 1=DD, 2=HD, 3=ED)
|
||||
1-0: Reserved
|
||||
|
||||
If Hard Disk:
|
||||
6: Removable
|
||||
5-3: Type (0=Hard, 1=CF, 2=SD, 3=USB, 4=ROM, 5=RAM, 6=RAMF, 7=?)
|
||||
2-0: Reserved
|
||||
|
||||
Note: IDE value 848Ah in IDENTIFY DEVICE data word 0 indicates CF Card
|
||||
|
||||
MEDIA ($18):
|
||||
BC=Function/Unit A=Result
|
||||
E0:=Enable Media Discovery E=Media ID (legacy)
|
||||
BC=Function/Unit A=Result
|
||||
E:0=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)
|
||||
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
|
||||
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
|
||||
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
|
||||
BC=Function/Sub-function A=Result
|
||||
|
||||
C=0: Report total unit count in system:
|
||||
BC=Function/Sub-function A=Result
|
||||
B=Count
|
||||
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
|
||||
===============
|
||||
Video Functions
|
||||
===============
|
||||
|
||||
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------------
|
||||
|
||||
Unit Device Type Capacity/Mode
|
||||
---------- ---------- ---------------- --------------------
|
||||
Disk 0 MD0: ROM Disk 384K, LBA
|
||||
Disk 1 MD1: RAM Disk 384K, LBA
|
||||
Disk 2 FD0: Floppy Disk 3.5", DS/HD, CHS
|
||||
Disk 3 FD1: Floppy Disk 5.25", DS/HD, CHS
|
||||
Disk 4 PPIDE0: Hard Disk 2345M, LBA
|
||||
Disk 5 IDE0: Compact Flash 2048M, LBA
|
||||
Disk 6 SD0: SD Card 4096M, LBA
|
||||
Disk 7 PRPSD0: SD Card 2048M, LBA
|
||||
Disk 8 RF0: RAM Floppy 4M, LBA
|
||||
Serial 0 UART0: RS-232 38400,8N1,HFC
|
||||
Serial 1 PRPCON0: Direct --
|
||||
Serial 2 CVDU0: Direct --
|
||||
Serial 2 VDU0: Direct --
|
||||
Serial 2 SCG0: Direct --
|
||||
Video 0 PRPCON0: VDA Text 80x25, ANSI
|
||||
Video 1 CVDU0: VDA Text 80x25, ANSI
|
||||
Video 2 VDU0: VDA Text 80x25, ANSI
|
||||
Video 3 SCG0: VDA Text 40x25, TTY
|
||||
|
||||
Unit: Function Group & Unit Index
|
||||
Device: <driver>_DEVICE Device Type & Device Num
|
||||
Type: <driver>_DEVICE Type & Attributes
|
||||
Capacity/Mode:
|
||||
Disk: <driver>_DEVICE Attributes & <driver>_CAPACITY
|
||||
Serial: <driver>_QUERY
|
||||
Video: <driver>_QUERY
|
||||
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------------
|
||||
|
||||
<VDA>_INIT:
|
||||
- INIT HARDWARE
|
||||
- ADD OURSELVES TO VDA_TBL
|
||||
- ADD OURSELVES TO CIO_TBL
|
||||
- GOTO <VDA>_VDAINIT
|
||||
|
||||
<VDA>_VDAINIT: (BC=FUNCTION/DEVID, HL=BITMAP ADR, D=TERMTYPE, E=VIDEO MODE)
|
||||
- CALL <VDA>_VDARESET
|
||||
- INITIALIZE EMULATION BY CALLING EMU_INIT (B=TERMTYPE, C=DEVTYPE, DE=VDADISPADR) ==> (DE=CIODISPADR)
|
||||
- SAVE DE TO <VDA>_CIODISPADR TO FORWARD SUBSEQUENT CIO FUNCTION CALLS
|
||||
- RETURN (A=STATUS)
|
||||
|
||||
<VDA>_VDARESET:
|
||||
- RESET HARDWARE
|
||||
- RETURN (A=STATUS)
|
||||
|
||||
EMU_INIT: (B=TERMTYPE, C=DEVTYPE, DE=VDADISPADR) ==> (DE=CIODISPADR)
|
||||
- GOTO TO <EMU>_INIT BASED ON VALUE IN B
|
||||
|
||||
<EMU>_INIT: (C=DEVTYPE, DE=VDADISPADR) ==> (DE=CIODISPADR)
|
||||
- RECORD C TO <EMU>_DEVTYPE SO <EMU>_DEVICE FUNCTION CAN RETURN IT
|
||||
- RECORD DE IN <EMU>_VDADISPADR FOR LATER USE IN CALLING PARENT VDA DRIVER
|
||||
- INITIALIZE/RESET EMULATION ENGINE
|
||||
- RETURN (A=STATUS, DE=CIODISPADR)
|
||||
|
||||
--------------------------
|
||||
|
||||
md
|
||||
hdsk
|
||||
rf
|
||||
ide
|
||||
sd
|
||||
ppide
|
||||
fd
|
||||
prp
|
||||
ppp
|
||||
|
||||
--------------------------
|
||||
|
||||
0: RAM- RAMdrive on the Z180 SBC Mark IV board
|
||||
LBASupported UserAddressableSectors 832
|
||||
@@ -235,42 +325,4 @@ 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 B=EMU_TYPE, C=VDA CIO UNIT NUM, DE=VDA DISPATCH ADR)
|
||||
- RECORD DE (EMULATOR CIO DISPATCH ADR) <VDA>_CIODISPADR TO FORWARD SUBSEQUENT CIO FUNCTION CALLS
|
||||
- RETURN (A=STATUS)
|
||||
|
||||
<VDA>_RES:
|
||||
- RESET HARDWARE
|
||||
- RETURN (A=STATUS)
|
||||
|
||||
EMU_INIT: (B=EMU TYPE, C=VDA CIO UNIT #, DE=VDA DISPATCH ADR) ==> (DE=EMULATOR CIO DISPATCH ADR)
|
||||
- GOTO TO <EMU>_INIT BASED ON VALUE IN B
|
||||
|
||||
<EMU>_INIT: (C=VDA CIO UNIT #, DE=VDA DISPATCH ADR) ==> (DE=EMULATOR CIO DISPATCH ADR)
|
||||
- RECORD C (VDA CIO UNIT) IN <EMU>_VDACIOUNIT SO <EMU>_DEVICE FUNCTION CAN RETURN IT
|
||||
- RECORD DE IN <EMU>_VDADISPADR FOR LATER USE IN CALLING PARENT VDA DRIVER
|
||||
- INITIALIZE/RESET EMULATION ENGINE
|
||||
- RETURN (A=STATUS, DE=EMULATOR CIO DISPATCH)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--------------------------
|
||||
md
|
||||
hdsk
|
||||
rf
|
||||
ide
|
||||
sd
|
||||
ppide
|
||||
fd
|
||||
prp
|
||||
ppp
|
||||
|
||||
@@ -27,10 +27,15 @@ ANSI_DEFCOLOR .EQU 7 ; WHITE ON BLACK
|
||||
;
|
||||
ANSI_INIT:
|
||||
; SAVE INCOMING VDA DISPATCH ADDRESS
|
||||
LD C,A ; VDA DRIVER'S CIO UNIT NUMBER
|
||||
LD (ANSI_CIOUNIT),A ; ... SAVED LOCALLY
|
||||
LD C,A ; VDA DRIVER'S DEVICE TYPE
|
||||
LD (ANSI_DEVTYPE),A ; ... SAVED LOCALLY
|
||||
LD (ANSI_VDADISPADR),DE ; RECORD NEW VDA DISPATCH ADDRESS
|
||||
CALL ANSI_RESET ; FULL RESET OF EMULATOR INTERNAL STATE
|
||||
LD DE,ANSI_DISPATCH ; RETURN OUR DISPATCH ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; RETURN
|
||||
;
|
||||
ANSI_RESET:
|
||||
; 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
|
||||
@@ -65,8 +70,6 @@ ANSI_INIT2: ; LOOP TO RESET TAB STOPS
|
||||
INC HL ; POINT TO NEXT BYTE
|
||||
DJNZ ANSI_INIT2 ; LOOP TILL ALL BYTES DONE
|
||||
;
|
||||
LD DE,ANSI_DISPATCH ; RETURN OUR DISPATCH ADDRESS
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
@@ -78,21 +81,21 @@ ANSI_VDADISPADR .EQU $ - 2
|
||||
;
|
||||
;
|
||||
ANSI_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,ANSI_IN ; $30
|
||||
DEC A
|
||||
JR Z,ANSI_OUT ; $31
|
||||
DEC A
|
||||
JR Z,ANSI_IST ; $32
|
||||
DEC A
|
||||
JR Z,ANSI_OST ; $33
|
||||
DEC A
|
||||
JR Z,ANSI_INITDEV ; $34
|
||||
DEC A
|
||||
JP Z,ANSI_QUERY ; $35
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,ANSI_CIOIN ; $30
|
||||
DEC A
|
||||
JP Z,ANSI_DEVICE ; $36
|
||||
JR Z,ANSI_CIOOUT ; $31
|
||||
DEC A
|
||||
JR Z,ANSI_CIOIST ; $32
|
||||
DEC A
|
||||
JR Z,ANSI_CIOOST ; $33
|
||||
DEC A
|
||||
JR Z,ANSI_CIOINIT ; $34
|
||||
DEC A
|
||||
JP Z,ANSI_CIOQUERY ; $35
|
||||
DEC A
|
||||
JP Z,ANSI_CIODEVICE ; $36
|
||||
CALL PANIC
|
||||
;
|
||||
;==================================================================================================
|
||||
@@ -101,12 +104,12 @@ ANSI_DISPATCH:
|
||||
;
|
||||
; READ A CHARACTER
|
||||
;
|
||||
ANSI_IN: ; HANDLE INPUT REQUEST
|
||||
ANSI_CIOIN: ; HANDLE INPUT REQUEST
|
||||
;
|
||||
; RETURN QUEUED DATA IF WE HAVE ANY
|
||||
LD A,(ANSI_QLEN) ; GET THE CURRENT QUEUE LENGTH
|
||||
OR A ; SET FLAGS
|
||||
JR Z,ANSI_IN1 ; NOTHING THERE, GO TO KEYBOARD READ
|
||||
JR Z,ANSI_CIOIN1 ; NOTHING THERE, GO TO KEYBOARD READ
|
||||
DEC A ; DECREMENT THE QUEUE LENGTH
|
||||
LD (ANSI_QLEN),A ; AND SAVE IT
|
||||
LD HL,(ANSI_QPTR) ; GET THE QUEUE POINTER
|
||||
@@ -117,44 +120,44 @@ ANSI_IN: ; HANDLE INPUT REQUEST
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; DONE
|
||||
;
|
||||
ANSI_IN1: ; PERFORM ACTUAL KEYBOARD INPUT
|
||||
ANSI_CIOIN1: ; PERFORM ACTUAL KEYBOARD INPUT
|
||||
LD B,BF_VDAKRD ; SET FUNCTION TO KEYBOARD READ
|
||||
CALL ANSI_VDADISP ; CALL VDA DISPATCHER
|
||||
LD A,E ; CHARACTER READ INTO A
|
||||
BIT 7,A ; TEST HIGH BIT
|
||||
JR NZ,ANSI_IN2 ; HANDLE $80 OR HIGHER AS SPECIAL CHAR
|
||||
JR NZ,ANSI_CIOIN2 ; HANDLE $80 OR HIGHER AS SPECIAL CHAR
|
||||
XOR A ; OTHERWISE, SIGNAL SUCCESS
|
||||
RET ; AND RETURN THE KEY
|
||||
;
|
||||
ANSI_IN2: ; HANDLE SPECIAL KEY
|
||||
ANSI_CIOIN2: ; HANDLE SPECIAL KEY
|
||||
CALL ANSI_KDISP ; IF $80 OR HIGHER, DISPATCH
|
||||
JR ANSI_IN ; AND LOOP
|
||||
JR ANSI_CIOIN ; AND LOOP
|
||||
;
|
||||
; WRITE A CHARACTER W/ EMULATION
|
||||
;
|
||||
ANSI_OUT:
|
||||
LD HL,ANSI_OUT2 ; RETURN ADDRESS
|
||||
ANSI_CIOOUT:
|
||||
LD HL,ANSI_CIOOUT2 ; RETURN ADDRESS
|
||||
PUSH HL ; PUT IT ON STACK
|
||||
LD A,E ; GET THE INCOMING CHARACTER
|
||||
CP $20 ; $00-$1F IS C0
|
||||
JP C,ANSI_C0DISP ; IF C0, DO C0 DISPATCH
|
||||
CP $80 ; $20-$7F
|
||||
JR C,ANSI_OUT1 ; HANDLE VIA STATE MACHINE
|
||||
JR C,ANSI_CIOOUT1 ; HANDLE VIA STATE MACHINE
|
||||
CP $A0 ; $80-$9F IS C1
|
||||
JP C,ANSI_C1DISP ; IF C1, DO C1 DISPATCH
|
||||
;
|
||||
ANSI_OUT1: ; PROCESS OTHER CHARS VIA STATE MACHINE
|
||||
ANSI_CIOOUT1: ; PROCESS OTHER CHARS VIA STATE MACHINE
|
||||
LD HL,(ANSI_STATE) ; LOAD THE CURRENT STATE
|
||||
JP (HL) ; DO IT
|
||||
; CALL JPHL ; DO IT
|
||||
;
|
||||
ANSI_OUT2: ; SET RESULT AND RETURN
|
||||
ANSI_CIOOUT2: ; SET RESULT AND RETURN
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; CHECK INPUT STATUS
|
||||
;
|
||||
ANSI_IST: ; CHECK QUEUE FIRST
|
||||
ANSI_CIOIST: ; CHECK QUEUE FIRST
|
||||
LD A,(ANSI_QLEN) ; GET CURRENT QUEUE LENGTH
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; RETURN IF CHAR(S) WAITING
|
||||
@@ -170,7 +173,7 @@ ANSI_IST: ; CHECK QUEUE FIRST
|
||||
CALL ANSI_VDADISP ; DO IT
|
||||
LD A,E ; CHARACTER READ TO A
|
||||
BIT 7,A ; TEST HIGH BIT
|
||||
JR NZ,ANSI_IST1 ; HANDLE $80 OR HIGHER AS SPECIAL CHAR
|
||||
JR NZ,ANSI_CIOIST1 ; HANDLE $80 OR HIGHER AS SPECIAL CHAR
|
||||
;
|
||||
; REGULAR CHARACTER RECEIVED, QUEUE IT AND RETURN CHARS WAITING STATUS
|
||||
LD HL,ANSI_QUEUE ; SET HL TO START OF QUEUE
|
||||
@@ -180,35 +183,43 @@ ANSI_IST: ; CHECK QUEUE FIRST
|
||||
XOR A ; ZERO ACCUM
|
||||
INC A ; ASSUM := 1 (NUM CHARS IN QUEUE)
|
||||
LD (ANSI_QLEN),A ; SAVE NEW QUEUE LEN
|
||||
JR ANSI_IST ; REPEAT
|
||||
JR ANSI_CIOIST ; REPEAT
|
||||
;
|
||||
ANSI_IST1: ; HANDLE SPECIAL KEY
|
||||
ANSI_CIOIST1: ; HANDLE SPECIAL KEY
|
||||
CALL ANSI_KDISP ; DO SPECIAL KEY HANDLING
|
||||
JR ANSI_IST ; REPEAT
|
||||
JR ANSI_CIOIST ; REPEAT
|
||||
;
|
||||
; CHECK OUTPUT STATUS
|
||||
;
|
||||
ANSI_OST: ; VIDEO OUTPUT IS *ALWAYS* READY
|
||||
ANSI_CIOOST: ; VIDEO OUTPUT IS *ALWAYS* READY
|
||||
XOR A ; ZERO ACCUM
|
||||
INC A ; A := $FF TO SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
;
|
||||
; INITIALIZE
|
||||
;
|
||||
ANSI_INITDEV:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
ANSI_CIOINIT:
|
||||
; SETUP AND FORWARD CALL TO PARENT VDA DRIVER'S VDAINIT FUNCTION
|
||||
LD B,BF_VDAINI ; WE ARE FORWARDING TO VDAINIT FUNCTION
|
||||
LD A,(ANSI_DEVTYPE) ; GET DEVICE TYPE WE ARE EMULATING FOR
|
||||
LD C,A ; AND PUT IT IN C
|
||||
LD D,L ; TERMTYPE TO D
|
||||
LD E,0 ; VIDEO MODE = 0
|
||||
LD HL,0 ; NO BITMAP, LEAVE IT ALONG
|
||||
JP ANSI_VDADISP ; LET VDA DRIVER HANDLE IT FROM HERE
|
||||
;
|
||||
; QUERY STATUS
|
||||
;
|
||||
ANSI_QUERY:
|
||||
CALL PANIC ; NOT IMPLEMENTED
|
||||
ANSI_CIOQUERY:
|
||||
LD DE,0
|
||||
LD HL,0
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; REPORT DEVICE
|
||||
;
|
||||
ANSI_DEVICE:
|
||||
LD A,(ANSI_CIOUNIT) ; GET THE CURRENT CIO DEVICE
|
||||
ANSI_CIODEVICE:
|
||||
LD A,(ANSI_DEVTYPE) ; GET DEVICE TYPE WE ARE EMULATING FOR
|
||||
LD D,A ; AND PASS BACK IN D
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
@@ -338,7 +349,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_INITDEV ; DO A FULL RESET
|
||||
JP Z,ANSI_RESET ; DO A FULL RESET
|
||||
JP ANSI_UNK ; UNKNOWN, ABORT
|
||||
;
|
||||
ANSI_ESCDISP2: ; ESC DISPATCHING FOR '#' INT CHAR
|
||||
@@ -1376,4 +1387,4 @@ 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_CIOUNIT .DB $FF ; CIO UNIT NUMBER OF PARENT VDA
|
||||
ANSI_DEVTYPE .DB $FF ; DEVICE TYPE OF PARENT VDA'S CIO DEVICE
|
||||
|
||||
@@ -229,11 +229,18 @@ ASCI0_OST:
|
||||
;
|
||||
;
|
||||
ASCI0_INITDEV:
|
||||
ASCI0_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI0_QUERY:
|
||||
LD DE,ASCI0BAUD >> 16
|
||||
LD HL,ASCI0BAUD & $FFFF
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI0_DEVICE:
|
||||
LD D,CIODEV_ASCI ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
@@ -313,11 +320,18 @@ ASCI1_OST:
|
||||
;
|
||||
;
|
||||
ASCI1_INITDEV:
|
||||
ASCI1_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI1_QUERY:
|
||||
LD DE,ASCI1BAUD >> 16
|
||||
LD HL,ASCI1BAUD & $FFFF
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ASCI1_DEVICE:
|
||||
LD D,CIODEV_ASCI ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
|
||||
@@ -42,7 +42,7 @@ CVDU_INIT:
|
||||
LD C,CIODEV_CVDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (CVDU_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
;LD (CVDU_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
@@ -102,8 +102,9 @@ CVDU_VDAINI:
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD B,D ; EMULATION TYPE TO B
|
||||
LD A,(CVDU_CIOUNIT) ; CIO UNIT NUMBER
|
||||
LD C,A ; ... IS PASSED IN C
|
||||
;LD A,(CVDU_CIOUNIT) ; CIO UNIT NUMBER
|
||||
;LD C,A ; ... IS PASSED IN C
|
||||
LD C,CIODEV_CVDU ; PASS OUR DEVICE TYPE IN C
|
||||
LD DE,CVDU_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
LD (CVDU_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
|
||||
@@ -649,7 +650,7 @@ CVDU_BLKCPY1:
|
||||
; CVDU DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
CVDU_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;CVDU_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;
|
||||
CVDU_ATTR .DB 0 ; CURRENT COLOR
|
||||
CVDU_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
|
||||
@@ -410,6 +410,21 @@ FD_DEFMED:
|
||||
FD_DEVICE:
|
||||
LD D,DIODEV_FD ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
#IF (FDMEDIA == FDM720)
|
||||
LD C,%11010100 ; 3.5" DS/DD
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM144)
|
||||
LD C,%11011000 ; 3.5" DS/HD
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM360)
|
||||
LD C,%10110100 ; 5.25" DS/DD
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM120)
|
||||
LD C,%10111000 ; 5.25" DS/HD
|
||||
#ENDIF
|
||||
#IF (FDMEDIA == FDM111)
|
||||
LD C,%10010100 ; 8" DS/DD
|
||||
#ENDIF
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -589,6 +589,9 @@ INITSYS1:
|
||||
#ENDIF
|
||||
;
|
||||
INITSYS2:
|
||||
;
|
||||
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE
|
||||
;
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
@@ -1070,7 +1073,7 @@ RTC_DISPATCH:
|
||||
; TO THE CORRRECT EMULATION MODULE.
|
||||
;
|
||||
; B: EMULATION TYPE ID (1=TTY, 2=ANSI, ETC.)
|
||||
; C: VDA DRIVER'S CIO UNIT NUMBER
|
||||
; C: VDA DRIVER'S VDA DEVICE TYPE
|
||||
; DE: VDA DRIVER'S DISPATCH ADDRESS
|
||||
;
|
||||
;
|
||||
@@ -1317,7 +1320,7 @@ SYS_GETCPUINFO:
|
||||
;
|
||||
SYS_GETMEMINFO:
|
||||
LD D,ROMSIZE / 32
|
||||
LD D,RAMSIZE / 32
|
||||
LD E,RAMSIZE / 32
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
@@ -1981,6 +1984,391 @@ PRTD3M3:
|
||||
RET
|
||||
;
|
||||
;==================================================================================================
|
||||
; DISPLAY SUMMARY OF ATTACHED UNITS/DEVICES
|
||||
;==================================================================================================
|
||||
;
|
||||
PRTSUM:
|
||||
CALL NEWLINE2 ; SKIP A LINE
|
||||
LD DE,PS_STRHDR ; POINT TO HEADER
|
||||
CALL WRITESTR ; PRINT IT
|
||||
;
|
||||
; PRINT DISK DEVICES
|
||||
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET
|
||||
LD C,BF_SYSGET_DIOCNT ; SUBFUNC: DISK UNIT COUNT
|
||||
RST 08 ; E := DISK UNIT COUNT
|
||||
LD B,E ; MOVE TO B FOR LOOP COUNT
|
||||
LD C,0 ; D WILL BE UNIT INDEX
|
||||
PRTSUM1:
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
CALL PS_DISK ; PRINT DISK INFO
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
INC C ; BUMP DISK UNIT INDEX
|
||||
DJNZ PRTSUM1 ; LOOP THRU ALL DISK DEVICES
|
||||
;
|
||||
; PRINT SERIAL DEVICES
|
||||
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET
|
||||
LD C,BF_SYSGET_CIOCNT ; SUBFUNC: DISK UNIT COUNT
|
||||
RST 08 ; E := DISK UNIT COUNT
|
||||
LD B,E ; MOVE TO B FOR LOOP COUNT
|
||||
LD C,0 ; D WILL BE UNIT INDEX
|
||||
PRTSUM2:
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
CALL PS_SERIAL ; PRINT SERIAL INFO
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
INC C ; BUMP DISK UNIT INDEX
|
||||
DJNZ PRTSUM2 ; LOOP THRU ALL DISK DEVICES
|
||||
;
|
||||
RET ; DONE
|
||||
;
|
||||
; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C
|
||||
;
|
||||
PS_DISK:
|
||||
PUSH BC ; SAVE UNIT INDEX FOR LATER
|
||||
;
|
||||
; UNIT COLUMN
|
||||
PRTS("Disk $")
|
||||
LD A,C ; MOVE UNIT NUM TO A
|
||||
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT
|
||||
PRTS(" $") ; PAD TO NEXT COLUMN
|
||||
;
|
||||
; DEVICE COLUMN
|
||||
LD B,BF_DIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
|
||||
RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES
|
||||
PUSH BC ; SAVE ATTRIBUTES
|
||||
LD HL,PS_DDSTRREF ; POINT TO DISK DEVICE TYPE NAME TABLE
|
||||
CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH
|
||||
POP DE ; RECOVER ATTRIBUTES TO DE
|
||||
PUSH DE ; SAVE ATTRIBUTES AGAIN
|
||||
CALL PS_PRTDT ; PRINT DISK TYPE
|
||||
POP DE ; RESTORE ATTRIBUTES
|
||||
POP BC ; RESTORE UNIT NUM
|
||||
CALL PS_PRTDC ; PRINT DISK CAPACITY
|
||||
;
|
||||
CALL NEWLINE
|
||||
RET
|
||||
;
|
||||
; PRINT DISK TYPE (DISK ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTDT:
|
||||
LD A,E ; ATTRIBUTES TO A
|
||||
BIT 7,A ; FLOPPY BIT SET?
|
||||
LD HL,PS_DTFLOP ; ASSUME FLOPPY
|
||||
JR NZ,PS_PRTDT1 ; IF FLOPPY, JUMP AHEAD
|
||||
RRCA ; SHIFT TYPE BITS
|
||||
RRCA
|
||||
RRCA
|
||||
AND $07 ; AND ISOLATE THEM
|
||||
RLCA ; X2 FOR WORD OFFSET IN STRING TABLE
|
||||
LD HL,PS_DTSTRREF + 2 ; POINT TO STR REF TABLE (SKIP FLOPPY STRING)
|
||||
CALL ADDHLA
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
LD H,(HL)
|
||||
LD L,A
|
||||
;
|
||||
PS_PRTDT1:
|
||||
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
|
||||
LD A,18 ; 18 CHAR FIELD
|
||||
SUB C
|
||||
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
|
||||
RET
|
||||
|
||||
|
||||
;LD A,D
|
||||
;RRCA ; TYPE IS IN UPPER NIBBLE, MOVE TO LOWER NIBBLE
|
||||
;RRCA
|
||||
;RRCA
|
||||
;RRCA
|
||||
;RLCA ; X2 FOR WORD OFFSET IN STRING TABLE
|
||||
;CALL ADDHLA
|
||||
;LD A,(HL)
|
||||
;INC HL
|
||||
;LD H,(HL)
|
||||
;LD L,A
|
||||
|
||||
;CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
|
||||
;LD A,E ; NUM
|
||||
;CALL PRTDECB ; PRINT NUM, ASSUME 1 CHAR
|
||||
;CALL PC_COLON ; PRINT COLON
|
||||
;LD A,12 - 2 ; 12 CHAR FIELD - 1 POS FOR UNIT NUM AND 1 POS FOR COLON
|
||||
;SUB C
|
||||
;CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
|
||||
;RET
|
||||
;
|
||||
; PRINT DISK CAPACITY (UNIT IN C, ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTDC:
|
||||
;
|
||||
LD A,E ; ATTRIBUTE TO ACCUM
|
||||
BIT 7,A ; TEST FOR FLOPPY
|
||||
JR NZ,PS_PRTDC2 ; HANDLE FLOPPY
|
||||
RRCA ; ISOLATE TYPE BITS
|
||||
RRCA
|
||||
RRCA
|
||||
AND $07
|
||||
CP 4 ; ROM DISK?
|
||||
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
|
||||
CP 5 ; RAM DISK?
|
||||
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
|
||||
;
|
||||
; PRINT HARD DISK STORAGE SIZE IN MB
|
||||
LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY
|
||||
RST 08 ; DE:HL := BLOCKS
|
||||
RES 7,D ; CLEAR LBA BIT
|
||||
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
|
||||
CALL SRL32 ; RIGHT SHIFT
|
||||
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
|
||||
PRTS("MB$") ; PRINT SUFFIX
|
||||
CALL PC_COMMA
|
||||
PRTS(" LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
|
||||
RET ; DONE
|
||||
;
|
||||
PS_PRTDC1:
|
||||
; PRINT ROM/ROM DISK CAPACITY IN KB
|
||||
LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY
|
||||
RST 08 ; DE:HL := BLOCKS
|
||||
RES 7,D ; CLEAR LBA BIT
|
||||
LD B,1 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
|
||||
CALL SRL32 ; RIGHT SHIFT
|
||||
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
|
||||
PRTS("KB$") ; PRINT SUFFIX
|
||||
CALL PC_COMMA
|
||||
PRTS(" LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
|
||||
RET ; DONE
|
||||
;
|
||||
PS_PRTDC2:
|
||||
LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING
|
||||
; PRINT FLOPPY TYPE
|
||||
LD A,C ; ATTRIBUTE TO ACCUM
|
||||
RLCA ; ISOLATE FORM FACTOR BITS
|
||||
RLCA
|
||||
RLCA
|
||||
AND $03
|
||||
LD DE,PS_FLP8 ; ASSUME 8"
|
||||
CP 0
|
||||
JR Z,PS_PRTDC2A
|
||||
LD DE,PS_FLP5 ; ASSUME 5.25"
|
||||
CP 1
|
||||
JR Z,PS_PRTDC2A
|
||||
LD DE,PS_FLP3 ; ASSUME 3.5"
|
||||
CP 2
|
||||
JR Z,PS_PRTDC2A
|
||||
LD DE,PS_FLPN ; ASSUME OTHER"
|
||||
PS_PRTDC2A:
|
||||
CALL WRITESTR
|
||||
; PRINT FLOPPY SIDES
|
||||
LD A,C ; ATTRIBUTE TO ACCUM
|
||||
LD DE,PS_FLPSS ; ASSUME SINGLE SIDED
|
||||
BIT 4,A ; DS?
|
||||
JR Z,PS_PRTDC2B
|
||||
LD DE,PS_FLPDS ; DOUBLE SIDED
|
||||
PS_PRTDC2B:
|
||||
CALL WRITESTR
|
||||
; PRINT FLOPPY DENSITY
|
||||
LD A,C ; ATTRIBUTE TO ACCUM
|
||||
RRCA ; ISOLATE DENSITY BITS
|
||||
RRCA
|
||||
AND $03
|
||||
LD DE,PS_FLPSD ; SINGLE DENSITY
|
||||
CP 0
|
||||
JR Z,PS_PRTDC2C
|
||||
LD DE,PS_FLPDD ; DOUBLE DENSITY
|
||||
CP 1
|
||||
JR Z,PS_PRTDC2C
|
||||
LD DE,PS_FLPHD ; HIGH DENSITY
|
||||
CP 2
|
||||
JR Z,PS_PRTDC2C
|
||||
LD DE,PS_FLPED ; EXTENDED DENSITY
|
||||
CP 3
|
||||
JR Z,PS_PRTDC2C
|
||||
PS_PRTDC2C:
|
||||
CALL WRITESTR
|
||||
CALL PC_COMMA
|
||||
PRTS(" CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
|
||||
;
|
||||
RET ; DONE
|
||||
;
|
||||
; FLOPPY ATTRIBUTE STRINGS
|
||||
;
|
||||
PS_FLP8 .TEXT "8\", $"
|
||||
PS_FLP5 .TEXT "5.25\", $"
|
||||
PS_FLP3 .TEXT "3.5\", $"
|
||||
PS_FLPN .TEXT "???\", $"
|
||||
;
|
||||
PS_FLPSS .TEXT "SS/$"
|
||||
PS_FLPDS .TEXT "SS/$"
|
||||
;
|
||||
PS_FLPSD .TEXT "SD$"
|
||||
PS_FLPDD .TEXT "DD$"
|
||||
PS_FLPHD .TEXT "HD$"
|
||||
PS_FLPED .TEXT "ED$"
|
||||
;
|
||||
; PRINT ONE LINE SERIAL UNIT/DEVICE INFO, DISK UNIT INDEX IN C
|
||||
;
|
||||
PS_SERIAL:
|
||||
PUSH BC ; SAVE UNIT INDEX FOR LATER
|
||||
;
|
||||
; UNIT COLUMN
|
||||
PRTS("Serial $")
|
||||
LD A,C ; MOVE UNIT NUM TO A
|
||||
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT
|
||||
PRTS(" $") ; PAD TO NEXT COLUMN
|
||||
;
|
||||
; DEVICE COLUMN
|
||||
LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
|
||||
RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES
|
||||
PUSH BC ; SAVE ATTRIBUTES
|
||||
LD HL,PS_SDSTRREF ; POINT TO SERIAL DEVICE TYPE NAME TABLE
|
||||
CALL PS_PRTDEV ; PRINT SERIAL DEVICE NMEMONIC PADDED TO FIELD WIDTH
|
||||
POP DE ; RECOVER ATTRIBUTES
|
||||
PUSH DE ; SAVE ATTRIBUTES AGAIN
|
||||
CALL PS_PRTST ; PRINT SERIAL TYPE
|
||||
POP DE ; RESTORE ATTRIBUTES
|
||||
POP BC ; RESTORE UNIT NUM
|
||||
CALL PS_PRTSC ; PRINT SERIAL CONFIG
|
||||
;
|
||||
CALL NEWLINE
|
||||
RET
|
||||
;
|
||||
; PRINT SERIAL TYPE (SERIAL ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTST:
|
||||
LD HL,PS_STDUMMY
|
||||
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
|
||||
LD A,18 ; 18 CHAR FIELD
|
||||
SUB C
|
||||
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
|
||||
RET
|
||||
;
|
||||
; PRINT SERIAL CONFIG (UNIT IN C, ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTSC:
|
||||
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG
|
||||
RST 08 ; DE:HL := BAUD RATE
|
||||
PUSH DE ; DE:HL ==> HL:BC
|
||||
PUSH HL
|
||||
POP BC
|
||||
POP HL
|
||||
LD DE,PS_BCDTMP ; DE POINTS TO BCD TEMP
|
||||
CALL BIN2BCD ; CONVERT HL:BC TO BCD AT (DE)
|
||||
LD HL,PS_BCDTMP ; POINT TO TEMP BCD
|
||||
CALL PRTBCD ; AND PRINT IT
|
||||
CALL PC_COMMA
|
||||
PRTS(" 8N1$")
|
||||
RET
|
||||
|
||||
;
|
||||
; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE
|
||||
;
|
||||
PS_PRTDEV:
|
||||
LD A,D
|
||||
RRCA ; TYPE IS IN UPPER NIBBLE, MOVE TO LOWER NIBBLE
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RLCA ; X2 FOR WORD OFFSET IN STRING TABLE
|
||||
CALL ADDHLA
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
LD H,(HL)
|
||||
LD L,A
|
||||
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
|
||||
LD A,E ; NUM
|
||||
CALL PRTDECB ; PRINT NUM, ASSUME 1 CHAR
|
||||
CALL PC_COLON ; PRINT COLON
|
||||
LD A,12 - 2 ; 12 CHAR FIELD - 1 POS FOR UNIT NUM AND 1 POS FOR COLON
|
||||
SUB C
|
||||
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PS_PRT:
|
||||
; PRINT STRING AT (HL), $ TERM, RETURN CHARS PRINTED IN C
|
||||
LD C,0 ; INIT CHAR COUNT
|
||||
PS_PRT1:
|
||||
LD A,(HL) ; GET CHAR
|
||||
INC HL ; BUMP INDEX
|
||||
CP '$' ; TERM?
|
||||
RET Z ; IF SO, DONE
|
||||
CALL COUT ; PRINT IT
|
||||
INC C ; BUMP COUNTER
|
||||
JR PS_PRT1 ; AND LOOP
|
||||
;
|
||||
;
|
||||
;
|
||||
PS_PAD:
|
||||
; PAD N SPACES SPECIFIED IN A
|
||||
LD B,A
|
||||
LD A,' '
|
||||
PS_PAD1:
|
||||
CALL COUT
|
||||
DJNZ PS_PAD1
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PS_BCDTMP .FILL 5,0 ; TEMPORARY BCD NUMBER STORAGE
|
||||
;
|
||||
; DISK DEVICE STRINGS
|
||||
;
|
||||
PS_DDSTRREF:
|
||||
.DW PS_DDMD, PS_DDFD, PS_DDRF, PS_DDIDE, PS_DDATAPI, PS_DDPPIDE
|
||||
.DW PS_DDSD, PS_DDPRPSD, PS_DDPPPSD, PS_DDHDSK
|
||||
;
|
||||
PS_DDMD .TEXT "MD$"
|
||||
PS_DDFD .TEXT "FD$"
|
||||
PS_DDRF .TEXT "RF$"
|
||||
PS_DDIDE .TEXT "IDE$"
|
||||
PS_DDATAPI .TEXT "ATAPI$"
|
||||
PS_DDPPIDE .TEXT "PPIDE$"
|
||||
PS_DDSD .TEXT "SD$"
|
||||
PS_DDPRPSD .TEXT "PRPSD$"
|
||||
PS_DDPPPSD .TEXT "PPPSD$"
|
||||
PS_DDHDSK .TEXT "HDSK$"
|
||||
;
|
||||
; DISK TYPE STRINGS
|
||||
;
|
||||
PS_DTSTRREF:
|
||||
.DW PS_DTFLOP, PS_DTHARD, PS_DTCF, PS_DTSD
|
||||
.DW PS_DTUSB, PS_DTROM, PS_DTRAM, PS_DTRF
|
||||
;
|
||||
PS_DTFLOP .TEXT "Floppy Disk$"
|
||||
PS_DTHARD .TEXT "Hard Disk$"
|
||||
PS_DTCF .TEXT "CompactFlash$"
|
||||
PS_DTSD .TEXT "SD Card$"
|
||||
PS_DTUSB .TEXT "USB Drive$"
|
||||
PS_DTROM .TEXT "ROM Disk$"
|
||||
PS_DTRAM .TEXT "RAM Disk$"
|
||||
PS_DTRF .TEXT "RAM Floppy$"
|
||||
PS_DTOTHER .TEXT "???$"
|
||||
;
|
||||
; SERIAL DEVICE STRINGS
|
||||
;
|
||||
PS_SDSTRREF:
|
||||
.DW PS_SDUART, PS_SDASCI, PS_SDVDU, PS_SDCVDU
|
||||
.DW PS_SDUPD7220, PS_SDSCG, PS_SDPRPCON, PS_SDPPPCON
|
||||
;
|
||||
PS_SDUART .TEXT "UART$"
|
||||
PS_SDASCI .TEXT "ASCI$"
|
||||
PS_SDVDU .TEXT "VDU$"
|
||||
PS_SDCVDU .TEXT "CVDU$"
|
||||
PS_SDUPD7220 .TEXT "UPD7220$"
|
||||
PS_SDSCG .TEXT "SCG$"
|
||||
PS_SDPRPCON .TEXT "PRPCON$"
|
||||
PS_SDPPPCON .TEXT "PPPCON$"
|
||||
;
|
||||
; SERIAL TYPE STRINGS
|
||||
;
|
||||
PS_STDUMMY .TEXT "--$"
|
||||
;
|
||||
;
|
||||
; 0 1 2 3 4 5 6 7
|
||||
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789
|
||||
PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n"
|
||||
.TEXT "---------- ---------- ---------------- --------------------\r\n$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; CONSOLE CHARACTER I/O HELPER ROUTINES (REGISTERS PRESERVED)
|
||||
;==================================================================================================
|
||||
;
|
||||
@@ -2096,8 +2484,6 @@ IDLECOUNT .DB 0
|
||||
; .DW 0 ; LBA LOW WORD
|
||||
; .DW 0 ; LBA HIGH WORD
|
||||
;
|
||||
; DISK DEVICE/UNIT ID
|
||||
;HSTDSK .DB 0 ; DISK DEVICE/UNIT ID
|
||||
; FULL 32 BIT LBA
|
||||
HSTLBA .EQU $ ; REFERS TO START OF 32-BIT LBA
|
||||
; LBA LOW WORD -OR- TRACK
|
||||
@@ -2109,7 +2495,6 @@ HSTSEC .DB 0 ; SECTOR (0-255)
|
||||
HSTHEAD .DB 0 ; HEAD (0-255)
|
||||
;
|
||||
DIOBUF .DW 0 ; PTR TO CURRENT DISK XFR BUFFER
|
||||
;DIOBUFDEF .DW 0 ; PTR TO DEFAULT PREALLOCATED DISK XFR BUFFER
|
||||
;
|
||||
HB_INTSTKSAV .DW 0 ; SAVED STACK POINTER DURING INT PROCESSING
|
||||
.FILL $40,$FF ; 32 ENTRY STACK FOR INTERRUPT PROCESSING
|
||||
|
||||
@@ -61,11 +61,12 @@ BF_SYSFREE .EQU BF_SYS + 5 ; FREE HBIOS HEAP MEMORY
|
||||
BF_SYSVER .EQU BF_SYS + 6 ; GET HBIOS VERSION
|
||||
BF_SYSGET .EQU BF_SYS + 7 ; GET HBIOS INFO
|
||||
BF_SYSSET .EQU BF_SYS + 8 ; SET HBIOS PARAMETERS
|
||||
BF_PEEK .EQU BF_SYS + 9 ; GET A BYTE FROM HBIOS BANK
|
||||
BF_POKE .EQU BF_SYS + 10 ; PUT A BYTE TO HBIOS BANK
|
||||
BF_PEEK .EQU BF_SYS + 9 ; GET A BYTE FROM ALT BANK
|
||||
BF_POKE .EQU BF_SYS + 10 ; PUT A BYTE TO ALT BANK
|
||||
;
|
||||
BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT
|
||||
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
|
||||
BF_SYSGET_VDACNT .EQU $10 ; GET VDA UNIT COUNT
|
||||
BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION
|
||||
BF_SYSGET_CPUINFO .EQU $F0 ; GET CPU INFORMATION
|
||||
BF_SYSGET_MEMINFO .EQU $F1 ; GET MEMORY CAPACTITY INFO
|
||||
|
||||
@@ -129,6 +129,7 @@ HDSK_GEOM:
|
||||
HDSK_DEVICE:
|
||||
LD D,DIODEV_HDSK ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
LD C,%00000000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -194,6 +194,7 @@ IDE_DRVSLAVE .DB %11110000 ; LBA, SLAVE DEVICE
|
||||
IDE_STAT .EQU 0 ; LAST STATUS (1 BYTE)
|
||||
IDE_TYPE .EQU 1 ; DEVICE TYPE (1 BYTE)
|
||||
IDE_CAPACITY .EQU 2 ; DEVICE CAPACITY (1 DWORD/4 BYTES)
|
||||
IDE_CFFLAG .EQU 6 ; CF FLAG (1 BYTE), NON-ZERO=CF
|
||||
;
|
||||
; THE IDE_WAITXXX FUNCTIONS ARE BUILT TO TIMEOUT AS NEEDED SO DRIVER WILL
|
||||
; NOT HANG IF DEVICE IS UNRESPONSIVE. DIFFERENT TIMEOUTS ARE USED DEPENDING
|
||||
@@ -395,9 +396,16 @@ IDE_STATUS:
|
||||
;
|
||||
;
|
||||
IDE_DEVICE:
|
||||
LD D,DIODEV_IDE ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
LD D,DIODEV_IDE ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
IDE_DPTR(IDE_CFFLAG) ; POINT TO CF FLAG
|
||||
LD A,(HL) ; GET FLAG
|
||||
OR A ; SET ACCUM FLAGS
|
||||
LD C,%00000000 ; ASSUME NON-REMOVABLE HARD DISK
|
||||
JR Z,IDE_DEVICE1 ; IF Z, WE ARE DONE
|
||||
LD C,%01001000 ; OTHERWISE REMOVABLE COMPACT FLASH
|
||||
IDE_DEVICE1:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; IDE_GETMED
|
||||
@@ -906,6 +914,20 @@ IDE_INITDEV:
|
||||
LD DE,HB_TMPBUF ; POINT TO BUFFER
|
||||
DCALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
|
||||
;
|
||||
; DETERMINE IF CF DEVICE
|
||||
LD HL,HB_TMPBUF ; FIRST WORD OF IDENTIFY DATA HAS CF FLAG
|
||||
LD A,$8A ; FIRST BYTE OF MARKER IS $8A
|
||||
CP (HL) ; COMPARE
|
||||
JR NZ,IDE_INITDEV1 ; IF NO MATCH, NOT CF
|
||||
INC HL
|
||||
LD A,$84 ; SECOND BYTE OF MARKER IS $84
|
||||
CP (HL) ; COMPARE
|
||||
JR NZ,IDE_INITDEV1 ; IF NOT MATCH, NOT CF
|
||||
IDE_DPTR(IDE_CFFLAG) ; POINT HL TO CF FLAG FIELD
|
||||
LD A,$FF ; SET FLAG VALUE TO NON-ZERO (TRUE)
|
||||
LD (HL),A ; SAVE IT
|
||||
;
|
||||
IDE_INITDEV1:
|
||||
; GET DEVICE CAPACITY AND SAVE IT
|
||||
IDE_DPTR(IDE_CAPACITY) ; POINT HL TO UNIT CAPACITY FIELD
|
||||
PUSH HL ; SAVE POINTER
|
||||
|
||||
@@ -137,6 +137,12 @@ MD_GEOM1:
|
||||
MD_DEVICE:
|
||||
LD D,DIODEV_MD ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
LD A,C ; PHYSICAL UNIT TO A
|
||||
OR A ; SET FLAGS
|
||||
LD C,%00100000 ; ASSUME ROM DISK ATTRIBUTES
|
||||
JR Z,MD_DEVICE1 ; IF ZERO, IT IS ROM DISK, DONE
|
||||
LD C,%00101000 ; USE RAM DISK ATTRIBUTES
|
||||
MD_DEVICE1:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -197,6 +197,8 @@ PPIDE_DRVSLAVE .DB %11110000 ; LBA, SLAVE DEVICE
|
||||
PPIDE_STAT .EQU 0 ; LAST STATUS (1 BYTE)
|
||||
PPIDE_TYPE .EQU 1 ; DEVICE TYPE (1 BYTE)
|
||||
PPIDE_CAPACITY .EQU 2 ; DEVICE CAPACITY (1 DWORD/4 BYTES)
|
||||
PPIDE_CFFLAG .EQU 6 ; CF FLAG (1 BYTE), NON-ZERO=CF
|
||||
|
||||
;
|
||||
; THE IDE_WAITXXX FUNCTIONS ARE BUILT TO TIMEOUT AS NEEDED SO DRIVER WILL
|
||||
; NOT HANG IF DEVICE IS UNRESPONSIVE. DIFFERENT TIMEOUTS ARE USED DEPENDING
|
||||
@@ -410,9 +412,16 @@ PPIDE_SENSE:
|
||||
;
|
||||
;
|
||||
PPIDE_DEVICE:
|
||||
LD D,DIODEV_PPIDE ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
LD D,DIODEV_PPIDE ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
PPIDE_DPTR(PPIDE_CFFLAG) ; POINT TO CF FLAG
|
||||
LD A,(HL) ; GET FLAG
|
||||
OR A ; SET ACCUM FLAGS
|
||||
LD C,%00000000 ; ASSUME NON-REMOVABLE HARD DISK
|
||||
JR Z,PPIDE_DEVICE1 ; IF Z, WE ARE DONE
|
||||
LD C,%01001000 ; OTHERWISE REMOVABLE COMPACT FLASH
|
||||
PPIDE_DEVICE1:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; IDE_GETMED
|
||||
@@ -985,6 +994,20 @@ PPIDE_INITDEV:
|
||||
LD DE,HB_TMPBUF ; POINT TO BUFFER
|
||||
DCALL DUMP_BUFFER ; DUMP IT IF DEBUGGING
|
||||
;
|
||||
; DETERMINE IF CF DEVICE
|
||||
LD HL,HB_TMPBUF ; FIRST WORD OF IDENTIFY DATA HAS CF FLAG
|
||||
LD A,$8A ; FIRST BYTE OF MARKER IS $8A
|
||||
CP (HL) ; COMPARE
|
||||
JR NZ,PPIDE_INITDEV1 ; IF NO MATCH, NOT CF
|
||||
INC HL
|
||||
LD A,$84 ; SECOND BYTE OF MARKER IS $84
|
||||
CP (HL) ; COMPARE
|
||||
JR NZ,PPIDE_INITDEV1 ; IF NOT MATCH, NOT CF
|
||||
PPIDE_DPTR(PPIDE_CFFLAG) ; POINT HL TO CF FLAG FIELD
|
||||
LD A,$FF ; SET FLAG VALUE TO NON-ZERO (TRUE)
|
||||
LD (HL),A ; SAVE IT
|
||||
;
|
||||
PPIDE_INITDEV1:
|
||||
; GET DEVICE CAPACITY AND SAVE IT
|
||||
PPIDE_DPTR(PPIDE_CAPACITY) ; POINT HL TO UNIT CAPACITY FIELD
|
||||
PUSH HL ; SAVE POINTER
|
||||
|
||||
@@ -323,11 +323,18 @@ PPPCON_OST:
|
||||
;
|
||||
;
|
||||
PPPCON_INITDEV:
|
||||
PPPCON_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
PPPCON_QUERY:
|
||||
LD DE,0
|
||||
LD HL,0
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPPCON_DEVICE:
|
||||
LD D,CIODEV_PPPCON ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
@@ -583,6 +590,7 @@ PPPSD_RESET:
|
||||
PPPSD_DEVICE:
|
||||
LD D,DIODEV_PPPSD ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -198,11 +198,18 @@ PRPCON_OST1:
|
||||
;
|
||||
;
|
||||
PRPCON_INITDEV:
|
||||
PRPCON_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_QUERY:
|
||||
LD DE,0
|
||||
LD HL,0
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PRPCON_DEVICE:
|
||||
LD D,CIODEV_PRPCON ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
@@ -445,6 +452,7 @@ PRPSD_RESET:
|
||||
PRPSD_DEVICE:
|
||||
LD D,DIODEV_PRPSD ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -127,6 +127,7 @@ RF_GEOM:
|
||||
RF_DEVICE:
|
||||
LD D,DIODEV_RF ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVALBE RAM FLOPPY
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -43,7 +43,7 @@ SCG_INIT:
|
||||
LD C,CIODEV_SCG ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (SCG_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
;LD (SCG_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
@@ -103,8 +103,9 @@ SCG_VDAINI:
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD B,D ; EMULATION TYPE TO B
|
||||
LD A,(SCG_CIOUNIT) ; CIO UNIT NUMBER
|
||||
LD C,A ; ... IS PASSED IN C
|
||||
;LD A,(SCG_CIOUNIT) ; CIO UNIT NUMBER
|
||||
;LD C,A ; ... IS PASSED IN C
|
||||
LD C,CIODEV_SCG ; PASS OUR DEVICE TYPE IN C
|
||||
LD DE,SCG_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
LD (SCG_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
|
||||
@@ -597,7 +598,7 @@ SCG_BLKCPY3:
|
||||
; SCG DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
SCG_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;SCG_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;
|
||||
SCG_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
SCG_CURSAV .DB 0 ; SAVES ORIGINAL CHARACTER UNDER CURSOR
|
||||
|
||||
@@ -511,6 +511,7 @@ SD_RESET:
|
||||
SD_DEVICE:
|
||||
LD D,DIODEV_SD ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -15,10 +15,14 @@
|
||||
;
|
||||
TTY_INIT:
|
||||
; SAVE CALLING VDA DRIVER'S CIO UNIT NUMBER AND VDA DISPATCH ADDRESS
|
||||
LD C,A ; VDA DRIVER'S CIO UNIT NUMBER
|
||||
LD (TTY_CIOUNIT),A ; ... SAVED LOCALLY
|
||||
LD C,A ; VDA DRIVER'S DEVICE TYPE
|
||||
LD (TTY_DEVTYPE),A ; ... SAVED LOCALLY
|
||||
LD (TTY_VDADISPADR),DE ; ALSO SAVE VDA DRIVER'S DISPATCH ADDRESS
|
||||
LD DE,TTY_DISPATCH ; RETURN OUR DISPATCH ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; RETURN
|
||||
;
|
||||
TTY_RESET:
|
||||
; 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
|
||||
@@ -28,9 +32,7 @@ TTY_INIT:
|
||||
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
|
||||
RET ; DONE
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -43,65 +45,73 @@ TTY_VDADISPADR .EQU $ - 2
|
||||
TTY_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,TTY_IN ; $30
|
||||
JR Z,TTY_CIOIN ; $30
|
||||
DEC A
|
||||
JR Z,TTY_OUT ; $31
|
||||
JR Z,TTY_CIOOUT ; $31
|
||||
DEC A
|
||||
JR Z,TTY_IST ; $32
|
||||
JR Z,TTY_CIOIST ; $32
|
||||
DEC A
|
||||
JR Z,TTY_OST ; $33
|
||||
JR Z,TTY_CIOOST ; $33
|
||||
DEC A
|
||||
JR Z,TTY_INITDEV ; $34
|
||||
JR Z,TTY_CIOINIT ; $34
|
||||
DEC A
|
||||
JR Z,TTY_QUERY ; $35
|
||||
JR Z,TTY_CIOQUERY ; $35
|
||||
DEC A
|
||||
JR Z,TTY_DEVICE ; $36
|
||||
JR Z,TTY_CIODEVICE ; $36
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_IN:
|
||||
TTY_CIOIN:
|
||||
LD B,BF_VDAKRD ; SET FUNCTION TO KEYBOARD READ
|
||||
JP TTY_VDADISP ; CHAIN TO VDA DISPATCHER
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_OUT:
|
||||
TTY_CIOOUT:
|
||||
CALL TTY_DOCHAR ; HANDLE THE CHARACTER (EMULATION ENGINE)
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_IST:
|
||||
TTY_CIOIST:
|
||||
LD B,BF_VDAKST ; SET FUNCTION TO KEYBOARD STATUS
|
||||
JP TTY_VDADISP ; CHAIN TO VDA DISPATCHER
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_OST:
|
||||
TTY_CIOOST:
|
||||
XOR A ; ZERO ACCUM
|
||||
INC A ; A := $FF TO SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_INITDEV:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
TTY_CIOINIT:
|
||||
; SETUP AND FORWARD CALL TO PARENT VDA DRIVER'S VDAINIT FUNCTION
|
||||
LD B,BF_VDAINI ; WE ARE FORWARDING TO VDAINIT FUNCTION
|
||||
LD A,(TTY_DEVTYPE) ; GET DEVICE TYPE WE ARE EMULATING FOR
|
||||
LD C,A ; AND PUT IT IN C
|
||||
LD D,L ; TERMTYPE TO D
|
||||
LD E,0 ; VIDEO MODE = 0
|
||||
LD HL,0 ; NO BITMAP, LEAVE IT ALONG
|
||||
JP TTY_VDADISP ; LET VDA DRIVER HANDLE IT FROM HERE
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_QUERY:
|
||||
CALL PANIC ; NOT IMPLEMENTED
|
||||
TTY_CIOQUERY:
|
||||
LD DE,0
|
||||
LD HL,0
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_DEVICE:
|
||||
LD A,(TTY_CIOUNIT) ; PARENT VDA CIO UNIT
|
||||
TTY_CIODEVICE:
|
||||
LD A,(TTY_DEVTYPE) ; GET DEVICE TYPE WE ARE EMULATING FOR
|
||||
LD D,A ; AND PASS BACK IN D
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
LD E,C ; E := DEVICE NUMBER
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
@@ -184,4 +194,4 @@ TTY_DIM:
|
||||
TTY_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN
|
||||
TTY_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN
|
||||
;
|
||||
TTY_CIOUNIT .DB $FF ; CIO UNIT NUMBER OF PARENT VDA
|
||||
TTY_DEVTYPE .DB $FF ; DEVICE TYPE OF PARENT VDA'S CIO DEVICE
|
||||
|
||||
@@ -250,11 +250,18 @@ UART0_OST:
|
||||
RET
|
||||
;
|
||||
UART0_INITDEV:
|
||||
UART0_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
UART0_QUERY:
|
||||
LD DE,UART0BAUD >> 16
|
||||
LD HL,UART0BAUD & $FFFF
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
UART0_DEVICE:
|
||||
LD D,CIODEV_UART ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
@@ -355,11 +362,18 @@ UART1_OST:
|
||||
RET
|
||||
;
|
||||
UART1_INITDEV:
|
||||
UART1_QUERY:
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
UART1_QUERY:
|
||||
LD DE,UART1BAUD >> 16
|
||||
LD HL,UART1BAUD & $FFFF
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
UART1_DEVICE:
|
||||
LD D,CIODEV_UART ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
|
||||
@@ -83,6 +83,8 @@ PC_PRTCHR:
|
||||
POP AF
|
||||
RET
|
||||
|
||||
NEWLINE2:
|
||||
CALL NEWLINE
|
||||
NEWLINE:
|
||||
CALL PC_CR
|
||||
CALL PC_LF
|
||||
@@ -524,7 +526,7 @@ BYTE2BCD1:
|
||||
DELAY: ; 17TS (FROM INVOKING CALL) |
|
||||
LD A,(CPUSCL) ; 13TS |
|
||||
; |
|
||||
DELAY1: ; |
|
||||
DELAY1: ; |
|
||||
; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ |
|
||||
DEC A ; 4TS | |
|
||||
#IFDEF CPU_Z180 ; | |
|
||||
@@ -543,7 +545,7 @@ DELAY1: ; |
|
||||
; IMPACT OF OVERHEAD DIMINISHES AS DE AND/OR CPU SPEED INCREASES
|
||||
;
|
||||
; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US OUTER LOOP COST
|
||||
; NOTE: CPUSCL MUST BE >= 3!
|
||||
; NOTE: CPUSCL MUST BE > 0!
|
||||
;
|
||||
; EXAMPLE: 8MHZ CPU, DE=6250 (DELAY GOAL IS .1 SEC OR 100,000US)
|
||||
; INNER LOOP = ((16 * 6) - 5) = 91TS
|
||||
@@ -594,26 +596,28 @@ LDELAY:
|
||||
; CPU SCALER := MAX(1, (PHIMHZ - 2))
|
||||
;
|
||||
DELAY_INIT:
|
||||
;LD B,BF_SYSHCBGETB ; HB FUNC: GET HCB BYTE
|
||||
;LD C,HCB_CPUMHZ ; CPU SPEED IN MHZ
|
||||
;RST 08 ; DO IT
|
||||
;LD A,E ; VALUE TO ACCUM
|
||||
#IF (PLATFORM == PLT_UNA)
|
||||
LD C,$F9 ; UBIOS FUNC=GET CPU INFO
|
||||
RST 08 ; E := CPU MHZ
|
||||
LD E,A ; PUT SPEED IN MHZ IN ACCUM
|
||||
#ELSE
|
||||
LD B,BF_SYSGET ; HBIOS FUNC=GET SYS INFO
|
||||
LD C,BF_SYSGET_CPUINFO ; HBIOS SUBFUNC=GET CPU INFO
|
||||
RST 08 ; CALL HBIOS, RST 08 NOT YET INSTALLED
|
||||
LD A,L ; PUT SPEED IN MHZ IN ACCUM
|
||||
SUB 2 ; ADJUST AS REQUIRED BY DELAY FUNCTIONS
|
||||
LD (CPUSCL),A ; UPDATE CPU SCALER VALUE
|
||||
CP 1 ; CHECK FOR MINIMUM VALUE ALLOWED
|
||||
RET NC ; IF >= 1, WE ARE ALL DONE, RETURN
|
||||
LD A,1 ; OTHERWISE, SET MIN VALUE
|
||||
LD (CPUSCL),A ; AND SAVE IT
|
||||
#ENDIF
|
||||
SUB 2 ; ADJUST AS REQUIRED BY DELAY FUNCTIONS
|
||||
LD (CPUSCL),A ; UPDATE CPU SCALER VALUE
|
||||
CP 1 ; CHECK FOR MINIMUM VALUE ALLOWED
|
||||
RET NC ; IF >= 1, WE ARE ALL DONE, RETURN
|
||||
LD A,1 ; OTHERWISE, SET MIN VALUE
|
||||
LD (CPUSCL),A ; AND SAVE IT
|
||||
RET
|
||||
|
||||
#IF (CPUMHZ < 3)
|
||||
CPUSCL .DB 1 ; CPU SCALER MUST BE > 0
|
||||
CPUSCL .DB 1 ; CPU SCALER MUST BE > 0
|
||||
#ELSE
|
||||
CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
|
||||
CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
|
||||
#ENDIF
|
||||
;
|
||||
#ENDIF
|
||||
|
||||
@@ -39,7 +39,7 @@ VDU_INIT:
|
||||
LD C,CIODEV_VDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
LD (VDU_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
;LD (VDU_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
@@ -99,8 +99,9 @@ VDU_VDAINI:
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD B,D ; EMULATION TYPE TO B
|
||||
LD A,(VDU_CIOUNIT) ; CIO UNIT NUMBER
|
||||
LD C,A ; ... IS PASSED IN C
|
||||
;LD A,(VDU_CIOUNIT) ; CIO UNIT NUMBER
|
||||
;LD C,A ; ... IS PASSED IN C
|
||||
LD C,CIODEV_VDU ; PASS OUR DEVICE TYPE IN C
|
||||
LD DE,VDU_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
LD (VDU_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
|
||||
@@ -468,7 +469,7 @@ VDU_RSCROLL:
|
||||
; VDU DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
VDU_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;VDU_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;
|
||||
VDU_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
VDU_OFFSET .DW 0 ; CURRENT DISPLAY POSITION
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
#DEFINE RMN 8
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "2.8.0-alpha.0"
|
||||
#DEFINE BIOSVER "2.8.0-pre.1"
|
||||
|
||||
Reference in New Issue
Block a user