Browse Source

Merge pull request #111 from vipoo/dean/dev/general-tooling

Dean/dev/general tooling
pull/112/head
Wayne Warthen 6 years ago
committed by GitHub
parent
commit
83f3b80a8c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      .gitignore
  2. 20
      Makefile
  3. 142
      Source/CBIOS/cbios.asm
  4. 6
      Source/HBIOS/Build.sh
  5. 44
      Source/HBIOS/Makefile
  6. 57
      Source/HBIOS/cvdu.asm
  7. 2
      Source/HBIOS/romldr.asm
  8. 1
      Source/HBIOS/tms.asm
  9. 30
      Source/HBIOS/util.asm
  10. 57
      Source/HBIOS/vdu.asm
  11. 57
      Source/HBIOS/vga.asm
  12. 4
      Tools/Makefile.inc

6
.gitignore

@ -49,6 +49,9 @@ Source/Images/blankhd
Source/Prop/Spin/ParPortProp.list Source/Prop/Spin/ParPortProp.list
Source/Prop/Spin/PropIO.list Source/Prop/Spin/PropIO.list
Source/Prop/Spin/PropIO2.list Source/Prop/Spin/PropIO2.list
Source/Prop/ParPortProp.list
Source/Prop/PropIO.list
Source/Prop/PropIO2.list
Source/ZPM3/bnkbios3.spr Source/ZPM3/bnkbios3.spr
Source/ZPM3/gencpm.com Source/ZPM3/gencpm.com
Source/ZPM3/gencpm.com Source/ZPM3/gencpm.com
@ -94,3 +97,6 @@ Source/ZPM3/gencpm.com
Source/ZPM3/startzpm.com Source/ZPM3/startzpm.com
Source/ZPM3/zccp.com Source/ZPM3/zccp.com
Source/ZPM3/zpmldr.com Source/ZPM3/zpmldr.com
Source/ZPM3/genbnk.dat
Source/ZSDOS/zsdos.err

20
Makefile

@ -1,19 +1,19 @@
all: all:
cd Tools/unix ; make
cd Source ; make
cd Source/Images ; make
$(MAKE) --directory Tools/unix
$(MAKE) --directory Source
$(MAKE) --directory Source/Images
clean: clean:
cd Tools/unix ; make clean
cd Source ; make clean
cd Binary ; make clean
$(MAKE) --directory Tools/unix clean
$(MAKE) --directory Source clean
$(MAKE) --directory Binary clean
clobber: clobber:
cd Tools/unix ; make clobber
cd Source ; make clobber
cd Binary ; make clobber
$(MAKE) --directory Tools/unix clobber
$(MAKE) --directory Source clobber
$(MAKE) --directory Binary clobber
rm -f typescript rm -f typescript
diff: diff:
cd Source ; make diff
$(MAKE) --directory diff

142
Source/CBIOS/cbios.asm

@ -251,10 +251,10 @@ DEVMAP:
; +----8+-----8+------8+-+-16+-----8+------8+-+-16+ +-----8+------8+-+-16+ ; +----8+-----8+------8+-+-16+-----8+------8+-+-16+ +-----8+------8+-+-16+
; | | | ; | | |
; +--------------------+ +-> [DPH] +-> [DPH] ; +--------------------+ +-> [DPH] +-> [DPH]
; |
; V-----+-------+-------+-------+--------+-----+-----+-----+
; DPH: | XLT | 0000H | 0000H | 0000H | DIRBUF | DPB | CSV | ALV |
; +---16+-----16+-----16+-----16+------16+-+-16+-+-16+-+-16+
; |
; V-----+-------+-------+-------+--------+-----+-----+-----+
; DPH: | XLT | 0000H | 0000H | 0000H | DIRBUF | DPB | CSV | ALV |
; +---16+-----16+-----16+-----16+------16+-+-16+-+-16+-+-16+
; (ONE DPH PER DRIVE) | | | ; (ONE DPH PER DRIVE) | | |
; | | +----------+ ; | | +----------+
; | | | ; | | |
@ -263,9 +263,9 @@ DEVMAP:
; | +-------------+ +-------------+ ; | +-------------+ +-------------+
; | (CSZ BYTES) (ASZ BYTES) ; | (CSZ BYTES) (ASZ BYTES)
; | ; |
; +-----+-----+-----V-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
; DPB: | CSZ | ASZ | BLS | SPT | BSH | BLM | EXM | DSM | DRM | AL0 | AL1 | CKS | OFF |
; +---16+---16+----8+---16+----8+----8+----8+---16+---16+----8+----8+---16+---16+
; +-----+-----+-----V-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
; DPB: | CSZ | ASZ | BLS | SPT | BSH | BLM | EXM | DSM | DRM | AL0 | AL1 | CKS | OFF |
; +---16+---16+----8+---16+----8+----8+----8+---16+---16+----8+----8+---16+---16+
; |<--- PREFIX ---->|<------------------- STANDARD CP/M DPB ------------------->| ; |<--- PREFIX ---->|<------------------- STANDARD CP/M DPB ------------------->|
; ;
;================================================================================================== ;==================================================================================================
@ -353,7 +353,7 @@ WBOOT:
LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC) LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC)
RST 08 ; DO IT RST 08 ; DO IT
PUSH DE ; SAVE PREVIOUS BANK PUSH DE ; SAVE PREVIOUS BANK
LD HL,(CCPBUF) ; ADDRESS OF CCP BUF IN BIOS MEM LD HL,(CCPBUF) ; ADDRESS OF CCP BUF IN BIOS MEM
LD DE,CCP_LOC ; ADDRESS IN HI MEM OF CCP LD DE,CCP_LOC ; ADDRESS IN HI MEM OF CCP
LD BC,CCP_SIZ ; SIZE OF CCP LD BC,CCP_SIZ ; SIZE OF CCP
@ -383,11 +383,11 @@ WBOOT:
LD BC,6 LD BC,6
XOR A XOR A
CALL FILL CALL FILL
;
;
CALL RESCPM ; RESET CPM CALL RESCPM ; RESET CPM
JR GOCPM ; THEN OFF TO CP/M WE GO... JR GOCPM ; THEN OFF TO CP/M WE GO...
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
RESCPM: RESCPM:
; ;
LD A,$C3 ; LOAD A WITH 'JP' INSTRUCTION (USED BELOW) LD A,$C3 ; LOAD A WITH 'JP' INSTRUCTION (USED BELOW)
@ -406,7 +406,7 @@ RESCPM:
; LD ($0038),A ; LD ($0038),A
; LD HL,PANIC ; PANIC ROUTINE ADDRESS ; LD HL,PANIC ; PANIC ROUTINE ADDRESS
; LD ($0039),HL ; POKE IT ; LD ($0039),HL ; POKE IT
; CALL 5 -> INVOKE BDOS ; CALL 5 -> INVOKE BDOS
LD ($0005),A ; JP OPCODE AT $0005 LD ($0005),A ; JP OPCODE AT $0005
LD HL,BDOS_LOC + 6 ; GET BDOS ENTRY ADDRESS LD HL,BDOS_LOC + 6 ; GET BDOS ENTRY ADDRESS
@ -427,7 +427,7 @@ RESCPM:
; ;
RET RET
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
GOCPM: GOCPM:
; ;
; ENSURE VALID DISK AND JUMP TO CCP ; ENSURE VALID DISK AND JUMP TO CCP
@ -444,7 +444,7 @@ GOCCP:
LD C,A ; SETUP C WITH CURRENT USER/DISK, ASSUME IT IS OK LD C,A ; SETUP C WITH CURRENT USER/DISK, ASSUME IT IS OK
JP CCP_LOC ; JUMP TO COMMAND PROCESSOR JP CCP_LOC ; JUMP TO COMMAND PROCESSOR
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
GOMON: GOMON:
CALL PANIC CALL PANIC
; ;
@ -460,7 +460,7 @@ GOMON:
; LD BC,MON_SIZ ; LD BC,MON_SIZ
; LDIR ; LDIR
; CALL RAMPGZ ; CALL RAMPGZ
; ; JUMP TO MONITOR WARM ENTRY ; ; JUMP TO MONITOR WARM ENTRY
; JP MON_UART ; JP MON_UART
; ;
@ -479,7 +479,7 @@ CONST:
LD HL,CIOST ; HL = ADDRESS OF COMPLETION ROUTINE LD HL,CIOST ; HL = ADDRESS OF COMPLETION ROUTINE
JR CONIO JR CONIO
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
CONIN: CONIN:
; CONSOLE CHARACTER INTO REGISTER A ; CONSOLE CHARACTER INTO REGISTER A
; ;
@ -487,7 +487,7 @@ CONIN:
LD HL,CIOIN ; HL = ADDRESS OF COMPLETION ROUTINE LD HL,CIOIN ; HL = ADDRESS OF COMPLETION ROUTINE
JR CONIO JR CONIO
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
CONOUT: CONOUT:
; CONSOLE CHARACTER OUTPUT FROM REGISTER C ; CONSOLE CHARACTER OUTPUT FROM REGISTER C
; ;
@ -496,7 +496,7 @@ CONOUT:
LD E,C ; E = CHARACTER TO SEND LD E,C ; E = CHARACTER TO SEND
; JR CONIO ; COMMENTED OUT, FALL THROUGH OK ; JR CONIO ; COMMENTED OUT, FALL THROUGH OK
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
CONIO: CONIO:
; ;
LD A,(IOBYTE) ; GET IOBYTE LD A,(IOBYTE) ; GET IOBYTE
@ -504,8 +504,8 @@ CONIO:
;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 JR CIO_DISP
; ;
;__________________________________________________________________________________________________
LIST:
;__________________________________________________________________________________________________
LIST:
; LIST CHARACTER FROM REGISTER C ; LIST CHARACTER FROM REGISTER C
; ;
LD B,BF_CIOOUT ; B = FUNCTION LD B,BF_CIOOUT ; B = FUNCTION
@ -513,7 +513,7 @@ LIST:
LD E,C ; E = CHARACTER TO SEND LD E,C ; E = CHARACTER TO SEND
JR LISTIO JR LISTIO
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
LISTST: LISTST:
; RETURN LIST STATUS (0 IF NOT READY, 1 IF READY) ; RETURN LIST STATUS (0 IF NOT READY, 1 IF READY)
; ;
@ -521,7 +521,7 @@ LISTST:
LD HL,CIOST ; HL = ADDRESS OF COMPLETION ROUTINE LD HL,CIOST ; HL = ADDRESS OF COMPLETION ROUTINE
;JR LISTIO ; COMMENTED OUT, FALL THROUGH OK ;JR LISTIO ; COMMENTED OUT, FALL THROUGH OK
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
LISTIO: LISTIO:
; ;
LD A,(IOBYTE) ; GET IOBYTE LD A,(IOBYTE) ; GET IOBYTE
@ -531,7 +531,7 @@ LISTIO:
OR $0C ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C OR $0C ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C
JR CIO_DISP JR CIO_DISP
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
PUNCH: PUNCH:
; PUNCH CHARACTER FROM REGISTER C ; PUNCH CHARACTER FROM REGISTER C
; ;
@ -540,7 +540,7 @@ PUNCH:
LD E,C ; E = CHARACTER TO SEND LD E,C ; E = CHARACTER TO SEND
;JR PUNCHIO ; COMMENTED OUT, FALL THROUGH OK ;JR PUNCHIO ; COMMENTED OUT, FALL THROUGH OK
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
PUNCHIO: PUNCHIO:
; ;
LD A,(IOBYTE) ; GET IOBYTE LD A,(IOBYTE) ; GET IOBYTE
@ -552,7 +552,7 @@ PUNCHIO:
OR $08 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C OR $08 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C
JR CIO_DISP JR CIO_DISP
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
READER: READER:
; READ CHARACTER INTO REGISTER A FROM READER DEVICE ; READ CHARACTER INTO REGISTER A FROM READER DEVICE
; ;
@ -560,7 +560,7 @@ READER:
LD HL,CIOIN ; HL = ADDRESS OF COMPLETION ROUTINE LD HL,CIOIN ; HL = ADDRESS OF COMPLETION ROUTINE
JR READERIO JR READERIO
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
READERST: READERST:
; RETURN READER STATUS (0 IF NOT READY, 1 IF READY) ; RETURN READER STATUS (0 IF NOT READY, 1 IF READY)
; ;
@ -568,7 +568,7 @@ READERST:
LD HL,CIOST ; HL = ADDRESS OF COMPLETION ROUTINE LD HL,CIOST ; HL = ADDRESS OF COMPLETION ROUTINE
; JR READERIO ; COMMENTED OUT, FALL THROUGH OK ; JR READERIO ; COMMENTED OUT, FALL THROUGH OK
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
READERIO: READERIO:
; ;
LD A,(IOBYTE) ; GET IOBYTE LD A,(IOBYTE) ; GET IOBYTE
@ -578,20 +578,20 @@ READERIO:
OR $04 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C OR $04 ; PUT LOGICAL DEVICE IN BITS 2-3 (CON:=$00, RDR:=$04, PUN:=$08, LST:=$0C
JR CIO_DISP JR CIO_DISP
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
CIOIN: CIOIN:
; COMPLETION ROUTINE FOR CHARACTER INPUT FUNCTIONS ; COMPLETION ROUTINE FOR CHARACTER INPUT FUNCTIONS
; ;
LD A,E ; MOVE CHARACTER RETURNED TO A LD A,E ; MOVE CHARACTER RETURNED TO A
RET ; FALL THRU RET ; FALL THRU
;; ;;
;;__________________________________________________________________________________________________
;;__________________________________________________________________________________________________
;CIOOUT: ;CIOOUT:
;; COMPLETION ROUTINE FOR CHARACTER OUTPUT FUNCTIONS ;; COMPLETION ROUTINE FOR CHARACTER OUTPUT FUNCTIONS
;; ;;
; RET ; RET
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
CIOST: CIOST:
; COMPLETION ROUTINE FOR CHARACTER STATUS FUNCTIONS (IST/OST) ; COMPLETION ROUTINE FOR CHARACTER STATUS FUNCTIONS (IST/OST)
; ;
@ -621,7 +621,7 @@ CIO_DISP:
LD HL,DEVMAP ; HL = ADDRESS OF DEVICE MAP LD HL,DEVMAP ; HL = ADDRESS OF DEVICE MAP
CALL ADDHLA ; ADD OFFSET CALL ADDHLA ; ADD OFFSET
LD A,(HL) ; LOOKUP DEVICE CODE LD A,(HL) ; LOOKUP DEVICE CODE
#IFDEF PLTUNA #IFDEF PLTUNA
LD C,B ; MOVE FUNCTION TO C LD C,B ; MOVE FUNCTION TO C
@ -695,13 +695,13 @@ SELDSK:
; ;
JP DSK_SELECT JP DSK_SELECT
; ;
;__________________________________________________________________________________________________
;__________________________________________________________________________________________________
HOME: HOME:
; SELECT TRACK 0 (BC = 0) AND FALL THRU TO SETTRK ; SELECT TRACK 0 (BC = 0) AND FALL THRU TO SETTRK
#IF DSKTRACE #IF DSKTRACE
CALL PRTHOME CALL PRTHOME
#ENDIF #ENDIF
;
;
LD A,(HSTWRT) ; CHECK FOR PENDING WRITE LD A,(HSTWRT) ; CHECK FOR PENDING WRITE
OR A ; SET FLAGS OR A ; SET FLAGS
JR NZ,HOMED ; BUFFER IS DIRTY JR NZ,HOMED ; BUFFER IS DIRTY
@ -764,7 +764,7 @@ BLKRES:
XOR A XOR A
LD (HSTACT),A ; BUFFER NO LONGER VALID LD (HSTACT),A ; BUFFER NO LONGER VALID
LD (UNACNT),A ; CLEAR UNALLOC COUNT LD (UNACNT),A ; CLEAR UNALLOC COUNT
RET RET
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; ;
@ -812,7 +812,7 @@ BLKRW:
XOR A ; ZERO TO A XOR A ; ZERO TO A
LD (WRTYPE),A ; SET WRITE TYPE = 0 (WRT_ALC) TO ENSURE READ OCCURS LD (WRTYPE),A ; SET WRITE TYPE = 0 (WRT_ALC) TO ENSURE READ OCCURS
LD (UNACNT),A ; SET UNACNT TO ABORT SEQ WRITE PROCESSING LD (UNACNT),A ; SET UNACNT TO ABORT SEQ WRITE PROCESSING
JR BLKRW4 ; GO TO I/O JR BLKRW4 ; GO TO I/O
BLKRW1: BLKRW1:
@ -821,7 +821,7 @@ BLKRW1:
LD A,(WRTYPE) ; GET WRITE TYPE LD A,(WRTYPE) ; GET WRITE TYPE
CP WRT_UNA ; IS IT WRITE TO UNALLOC? CP WRT_UNA ; IS IT WRITE TO UNALLOC?
JR NZ,BLKRW2 ; NOPE, BYPASS JR NZ,BLKRW2 ; NOPE, BYPASS
; INITIALIZE START OF SEQUENTIAL WRITING TO UNALLOCATED BLOCK ; INITIALIZE START OF SEQUENTIAL WRITING TO UNALLOCATED BLOCK
; AND THEN TREAT SUBSEQUENT PROCESSING AS A NORMAL WRITE ; AND THEN TREAT SUBSEQUENT PROCESSING AS A NORMAL WRITE
CALL UNA_INI ; INITIALIZE SEQUENTIAL WRITE TRACKING CALL UNA_INI ; INITIALIZE SEQUENTIAL WRITE TRACKING
@ -835,11 +835,11 @@ BLKRW2:
CALL UNA_CHK ; CHECK FOR CONTINUATION OF SEQ WRITES TO UNALLOCATED BLOCK CALL UNA_CHK ; CHECK FOR CONTINUATION OF SEQ WRITES TO UNALLOCATED BLOCK
JR NZ,BLKRW3 ; NOPE, ABORT JR NZ,BLKRW3 ; NOPE, ABORT
; WE MATCHED EVERYTHING, TREAT AS WRITE TO UNALLOCATED BLOCK ; WE MATCHED EVERYTHING, TREAT AS WRITE TO UNALLOCATED BLOCK
LD A,WRT_UNA ; WRITE TO UNALLOCATED LD A,WRT_UNA ; WRITE TO UNALLOCATED
LD (WRTYPE),A ; SAVE WRITE TYPE LD (WRTYPE),A ; SAVE WRITE TYPE
CALL UNA_INC ; INCREMENT SEQUENTIAL WRITE TRACKING CALL UNA_INC ; INCREMENT SEQUENTIAL WRITE TRACKING
JR BLKRW4 ; PROCEED TO I/O PROCESSING JR BLKRW4 ; PROCEED TO I/O PROCESSING
@ -870,16 +870,16 @@ BLKRW4:
; IMPLEMENT THE TRANSLATED VALUES ; IMPLEMENT THE TRANSLATED VALUES
CALL BLK_SAV ; SAVE XLAT VALUES: XLT... -> HST... CALL BLK_SAV ; SAVE XLAT VALUES: XLT... -> HST...
; IF WRITE TO UNALLOC BLOCK, BYPASS READ, LEAVES BUFFER UNDEFINED ; IF WRITE TO UNALLOC BLOCK, BYPASS READ, LEAVES BUFFER UNDEFINED
LD A,(WRTYPE) LD A,(WRTYPE)
CP 2 CP 2
JR Z,BLKRW6 JR Z,BLKRW6
; DO THE ACTUAL READ ; DO THE ACTUAL READ
CALL DSK_READ ; READ PHYSICAL SECTOR INTO BUFFER CALL DSK_READ ; READ PHYSICAL SECTOR INTO BUFFER
JR Z,BLKRW6 ; GOOD READ, CONTINUE JR Z,BLKRW6 ; GOOD READ, CONTINUE
; IF READ FAILED, RESET (DE)BLOCKING ALGORITHM AND RETURN ERROR ; IF READ FAILED, RESET (DE)BLOCKING ALGORITHM AND RETURN ERROR
PUSH AF ; SAVE ERROR STATUS PUSH AF ; SAVE ERROR STATUS
CALL BLKRES ; INVALIDATE (DE)BLOCKING BUFFER CALL BLKRES ; INVALIDATE (DE)BLOCKING BUFFER
@ -896,7 +896,7 @@ BLKRW6:
CALL BLK_DEBLOCK ; EXTRACT DATA FROM BLOCK CALL BLK_DEBLOCK ; EXTRACT DATA FROM BLOCK
XOR A ; NO ERROR XOR A ; NO ERROR
RET ; ALL DONE RET ; ALL DONE
BLKRW7: BLKRW7:
; THIS IS A WRITE OPERATION, INSERT DATA INTO BLOCK ; THIS IS A WRITE OPERATION, INSERT DATA INTO BLOCK
CALL BLK_BLOCK ; INSERT DATA INTO BLOCK CALL BLK_BLOCK ; INSERT DATA INTO BLOCK
@ -904,7 +904,7 @@ BLKRW7:
; MARK THE BUFFER AS WRITTEN ; MARK THE BUFFER AS WRITTEN
LD A,TRUE ; BUFFER DIRTY = TRUE LD A,TRUE ; BUFFER DIRTY = TRUE
LD (HSTWRT),A ; SAVE IT LD (HSTWRT),A ; SAVE IT
; CHECK WRITE TYPE, IF WRT_DIR, FORCE THE PHYSICAL WRITE ; CHECK WRITE TYPE, IF WRT_DIR, FORCE THE PHYSICAL WRITE
LD A,(WRTYPE) ; GET WRITE TYPE LD A,(WRTYPE) ; GET WRITE TYPE
CP WRT_DIR ; 1 = DIRECTORY WRITE CP WRT_DIR ; 1 = DIRECTORY WRITE
@ -974,24 +974,24 @@ UNA_INC:
; DECREMENT THE BLOCK RECORD COUNT ; DECREMENT THE BLOCK RECORD COUNT
LD HL,UNACNT LD HL,UNACNT
DEC (HL) DEC (HL)
; INCREMENT THE SECTOR ; INCREMENT THE SECTOR
LD DE,(UNASEC) LD DE,(UNASEC)
INC DE INC DE
LD (UNASEC),DE LD (UNASEC),DE
; CHECK FOR END OF TRACK ; CHECK FOR END OF TRACK
LD HL,(UNASPT) LD HL,(UNASPT)
XOR A XOR A
SBC HL,DE SBC HL,DE
RET NZ RET NZ
; HANDLE END OF TRACK ; HANDLE END OF TRACK
LD (UNASEC),HL ; SECTOR BACK TO 0 (NOTE: HL=0 AT THIS POINT) LD (UNASEC),HL ; SECTOR BACK TO 0 (NOTE: HL=0 AT THIS POINT)
LD HL,(UNATRK) ; GET CURRENT TRACK LD HL,(UNATRK) ; GET CURRENT TRACK
INC HL ; BUMP IT INC HL ; BUMP IT
LD (UNATRK),HL ; SAVE IT LD (UNATRK),HL ; SAVE IT
RET RET
#ELSE #ELSE
; ;
@ -1022,15 +1022,15 @@ BLKRW1:
CALL BLK_DEBLOCK ; EXTRACT DATA FROM BLOCK CALL BLK_DEBLOCK ; EXTRACT DATA FROM BLOCK
XOR A ; NO ERROR XOR A ; NO ERROR
RET ; ALL DONE RET ; ALL DONE
BLKRW2: BLKRW2:
CALL BLK_BLOCK ; INSERT DATA INTO BLOCK CALL BLK_BLOCK ; INSERT DATA INTO BLOCK
CALL DSK_WRITE ; WRITE PHYSICAL SECTOR FROM BUFFER CALL DSK_WRITE ; WRITE PHYSICAL SECTOR FROM BUFFER
RET NZ ; BAIL OUT ON ERROR RET NZ ; BAIL OUT ON ERROR
LD A,TRUE ; BUFFER IS NOW VALID LD A,TRUE ; BUFFER IS NOW VALID
LD (HSTACT),A ; SAVE IT LD (HSTACT),A ; SAVE IT
XOR A ; ALL IS WELL, SET RETURN CODE 0 XOR A ; ALL IS WELL, SET RETURN CODE 0
RET ; RETURN RET ; RETURN
#ENDIF #ENDIF
@ -1247,7 +1247,7 @@ DSK_SELECT:
LD E,(HL) ; DEREFERENCE HL... LD E,(HL) ; DEREFERENCE HL...
INC HL ; INTO DE... INC HL ; INTO DE...
LD D,(HL) ; DE = ADDRESS OF DESIRED DPB LD D,(HL) ; DE = ADDRESS OF DESIRED DPB
;
;
; PLUG DPB INTO THE ACTIVE DPH ; PLUG DPB INTO THE ACTIVE DPH
LD HL,(SEKDPH) LD HL,(SEKDPH)
LD BC,10 ; OFFSET OF DPB IN DPH LD BC,10 ; OFFSET OF DPB IN DPH
@ -1272,7 +1272,7 @@ DSK_STATUS:
; C HAS CPM DRIVE, LOOKUP UNIT AND CHECK FOR INVALID DRIVE ; C HAS CPM DRIVE, LOOKUP UNIT AND CHECK FOR INVALID DRIVE
CALL DSK_GETINF ; B := UNIT CALL DSK_GETINF ; B := UNIT
RET NZ ; INVALID DRIVE ERROR RET NZ ; INVALID DRIVE ERROR
; VALID DRIVE, DISPATCH TO DRIVER ; VALID DRIVE, DISPATCH TO DRIVER
LD C,D ; C := UNIT LD C,D ; C := UNIT
LD B,BF_DIOSTATUS ; B := FUNCTION: STATUS LD B,BF_DIOSTATUS ; B := FUNCTION: STATUS
@ -1360,7 +1360,7 @@ CHS:
; ;
; FLOPPY SPECIFIC TRANSLATION ASSUMES FLOPPY IS DOUBLE-SIDED AND ; FLOPPY SPECIFIC TRANSLATION ASSUMES FLOPPY IS DOUBLE-SIDED AND
; USES LOW ORDER BIT OF TRACK AS HEAD VALUE ; USES LOW ORDER BIT OF TRACK AS HEAD VALUE
;
;
; HBIOS SEEK: HL=CYLINDER, D=HEAD, E=SECTOR ; HBIOS SEEK: HL=CYLINDER, D=HEAD, E=SECTOR
; ;
LD DE,(HSTSEC) ; SECTOR -> DE, HEAD(D) BECOMES ZERO LD DE,(HSTSEC) ; SECTOR -> DE, HEAD(D) BECOMES ZERO
@ -1846,12 +1846,12 @@ INIT:
LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC) LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC)
CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED) CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED)
PUSH DE ; SAVE PREVIOUS BANK PUSH DE ; SAVE PREVIOUS BANK
LD HL,0 ; FROM ADDRESS 0 (PAGE ZERO) LD HL,0 ; FROM ADDRESS 0 (PAGE ZERO)
LD DE,SECBUF ; USE SECBUF AS BOUNCE BUFFER LD DE,SECBUF ; USE SECBUF AS BOUNCE BUFFER
LD BC,256 ; ONE PAGE IS 256 BYTES LD BC,256 ; ONE PAGE IS 256 BYTES
LDIR ; DO IT LDIR ; DO IT
LD BC,$01FB ; UNA FUNC = SET BANK LD BC,$01FB ; UNA FUNC = SET BANK
POP DE ; RECOVER OPERATING BANK POP DE ; RECOVER OPERATING BANK
CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED) CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED)
@ -1860,7 +1860,7 @@ INIT:
LD DE,0 ; TO PAGE ZERO OF OPERATING BANK LD DE,0 ; TO PAGE ZERO OF OPERATING BANK
LD BC,256 ; ONE PAGE IS 256 BYTES LD BC,256 ; ONE PAGE IS 256 BYTES
LDIR ; DO IT LDIR ; DO IT
; INSTALL UNA INVOCATION VECTOR FOR RST 08 ; INSTALL UNA INVOCATION VECTOR FOR RST 08
LD A,$C3 ; JP INSTRUCTION LD A,$C3 ; JP INSTRUCTION
LD (8),A ; STORE AT 0x0008 LD (8),A ; STORE AT 0x0008
@ -1880,7 +1880,7 @@ INIT:
; SOFT RESET HBIOS ; SOFT RESET HBIOS
LD B,BF_SYSRESET ; HB FUNC: RESET LD B,BF_SYSRESET ; HB FUNC: RESET
RST 08 ; DO IT RST 08 ; DO IT
; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB) ; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB)
; FOR REFERENCE USE DURING INIT ; FOR REFERENCE USE DURING INIT
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
@ -1891,7 +1891,7 @@ INIT:
LD HL,HCB_LOC ; COPY FROM FIXED LOCATION IN HB BANK LD HL,HCB_LOC ; COPY FROM FIXED LOCATION IN HB BANK
LD DE,HCB ; TO TEMP LOCATION IN USR BANK LD DE,HCB ; TO TEMP LOCATION IN USR BANK
RST 08 ; DO IT RST 08 ; DO IT
; CAPTURE RAM DRIVE STARTING BANK ; CAPTURE RAM DRIVE STARTING BANK
LD A,(HCB + HCB_BIDRAMD0) LD A,(HCB + HCB_BIDRAMD0)
LD (BNKRAMD),A LD (BNKRAMD),A
@ -1905,7 +1905,7 @@ INIT:
CALL NEWLINE2 ; FORMATTING CALL NEWLINE2 ; FORMATTING
LD DE,STR_BANNER ; POINT TO BANNER LD DE,STR_BANNER ; POINT TO BANNER
CALL WRITESTR ; DISPLAY IT CALL WRITESTR ; DISPLAY IT
#IFDEF PLTUNA #IFDEF PLTUNA
; SAVE COMMAND PROCESSOR IMAGE TO MALLOCED CACHE IN UNA BIOS PAGE ; SAVE COMMAND PROCESSOR IMAGE TO MALLOCED CACHE IN UNA BIOS PAGE
LD C,$F7 ; UNA MALLOC LD C,$F7 ; UNA MALLOC
@ -1978,7 +1978,7 @@ INIT:
CALL PRTDEC ; PRINT IT CALL PRTDEC ; PRINT IT
LD DE,STR_MEMFREE ; ADD DESCRIPTION LD DE,STR_MEMFREE ; ADD DESCRIPTION
CALL WRITESTR ; AND PRINT IT CALL WRITESTR ; AND PRINT IT
;
;
LD A,(DEFDRIVE) ; GET DEFAULT DRIVE LD A,(DEFDRIVE) ; GET DEFAULT DRIVE
LD (CDISK),A ; ... AND SETUP CDISK LD (CDISK),A ; ... AND SETUP CDISK
; ;
@ -1997,7 +1997,7 @@ INIT2:
CALL PRTDECB ; PRINT IT CALL PRTDECB ; PRINT IT
CALL PC_PERIOD ; DECIMAL POINT CALL PC_PERIOD ; DECIMAL POINT
LD A,0 + (((BDOS_LOC % 1024) * 100) / 1024) LD A,0 + (((BDOS_LOC % 1024) * 100) / 1024)
CALL PRTDECB ; MANTISSA
CALL PRTDECB ; MANTISSA
LD DE,STR_TPA2 ; AND TPA SUFFIX LD DE,STR_TPA2 ; AND TPA SUFFIX
CALL WRITESTR CALL WRITESTR
CALL NEWLINE ; FORMATTING CALL NEWLINE ; FORMATTING
@ -2510,7 +2510,7 @@ DRV_INIT3A:
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER) PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
PUSH HL ; SAVE DRIVE LIST PTR PUSH HL ; SAVE DRIVE LIST PTR
PUSH BC ; SAVE LOOP CONTROL PUSH BC ; SAVE LOOP CONTROL
LD B,BF_DIOMEDIA ; HBIOS FUNC: SENSE MEDIA LD B,BF_DIOMEDIA ; HBIOS FUNC: SENSE MEDIA
LD E,1 ; PERFORM MEDIA DISCOVERY LD E,1 ; PERFORM MEDIA DISCOVERY
RST 08 RST 08
@ -2518,9 +2518,9 @@ DRV_INIT3A:
POP BC ; RESTORE LOOP CONTROL POP BC ; RESTORE LOOP CONTROL
POP HL ; RESTORE DRIVE LIST PTR POP HL ; RESTORE DRIVE LIST PTR
POP DE ; RESTORE DE POP DE ; RESTORE DE
RET NZ ; IF NO MEDIA, JUST RETURN RET NZ ; IF NO MEDIA, JUST RETURN
; IF ACTIVE... ; IF ACTIVE...
LD (HL),C ; SAVE UNIT NUM IN LIST LD (HL),C ; SAVE UNIT NUM IN LIST
INC HL ; BUMP PTR INC HL ; BUMP PTR
@ -2677,7 +2677,7 @@ DPH_INIT1:
CALL PRTDRV ; PRINT DRIVE INFO CALL PRTDRV ; PRINT DRIVE INFO
LD A,D ; A := UNIT LD A,D ; A := UNIT
PUSH HL ; SAVE DRIVE MAP POINTER PUSH HL ; SAVE DRIVE MAP POINTER
DPH_INIT1A:
DPH_INIT1A:
LD DE,(DPHTOP) ; GET ADDRESS OF NEXT DPH LD DE,(DPHTOP) ; GET ADDRESS OF NEXT DPH
PUSH DE ; ... AND SAVE IT PUSH DE ; ... AND SAVE IT
; INVOKE THE DPH BUILD ROUTINE ; INVOKE THE DPH BUILD ROUTINE
@ -2776,7 +2776,7 @@ MAKDPH1:
POP HL ; HL := START OF DPH POP HL ; HL := START OF DPH
LD A,8 ; SIZE OF DPH RESERVED AREA LD A,8 ; SIZE OF DPH RESERVED AREA
CALL ADDHLA ; LEAVE IT ALONE (ZERO FILLED) CALL ADDHLA ; LEAVE IT ALONE (ZERO FILLED)
LD BC,(DIRBUF) ; ADDRESS OF DIRBUF LD BC,(DIRBUF) ; ADDRESS OF DIRBUF
LD (HL),C ; PLUG DIRBUF LD (HL),C ; PLUG DIRBUF
INC HL ; ... INTO DPH INC HL ; ... INTO DPH
@ -2813,7 +2813,7 @@ MAKDPH2:
LD (HL),C ; SAVE CKS/ALS BUF LD (HL),C ; SAVE CKS/ALS BUF
INC HL ; ... ADDRESS IN INC HL ; ... ADDRESS IN
LD (HL),B ; ... DPH AND BUMP LD (HL),B ; ... DPH AND BUMP
INC HL ; ... TO NEXT DPH ENTRY
INC HL ; ... TO NEXT DPH ENTRY
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
; ;
@ -2831,9 +2831,9 @@ ALLOC:
EX DE,HL ; DE=NEW HEAPTOP, HL=HEAPLIM EX DE,HL ; DE=NEW HEAPTOP, HL=HEAPLIM
SBC HL,DE ; HEAPLIM - HEAPTOP SBC HL,DE ; HEAPLIM - HEAPTOP
JR C,ALLOCX ; C SET ON OVERFLOW ERROR JR C,ALLOCX ; C SET ON OVERFLOW ERROR
; ALLOCATION SUCCEEDED, COMMIT NEW HEAPTOP
; ALLOCATION SUCCEEDED, COMMIT NEW HEAPTOP
LD (HEAPTOP),DE ; SAVE NEW HEAPTOP LD (HEAPTOP),DE ; SAVE NEW HEAPTOP
ALLOCX:
ALLOCX:
POP HL ; RETURN VALUE TO HL POP HL ; RETURN VALUE TO HL
POP DE ; RECOVER DE POP DE ; RECOVER DE
RET RET
@ -2862,15 +2862,15 @@ PRTDRV:
PUSH BC ; PRESERVE BC PUSH BC ; PRESERVE BC
PUSH DE ; PRESERVE DE PUSH DE ; PRESERVE DE
PUSH HL ; PRESERVE HL PUSH HL ; PRESERVE HL
LD B,D ; B := UNIT LD B,D ; B := UNIT
LD C,$48 ; UNA FUNC: GET DISK TYPE LD C,$48 ; UNA FUNC: GET DISK TYPE
CALL $FFFD ; CALL UNA CALL $FFFD ; CALL UNA
LD A,D ; DISK TYPE TO A LD A,D ; DISK TYPE TO A
CP $40 CP $40
JR Z,PRTDRV1 ; IF SO, HANDLE RAM/ROM JR Z,PRTDRV1 ; IF SO, HANDLE RAM/ROM
LD DE,DEVIDE ; IDE STRING LD DE,DEVIDE ; IDE STRING
CP $41 ; IDE? CP $41 ; IDE?
JR Z,PRTDRVX ; IF YES, PRINT JR Z,PRTDRVX ; IF YES, PRINT

6
Source/HBIOS/Build.sh

@ -13,9 +13,9 @@ if [ $1 == '-d' ] ; then
diffdir=$1 diffdir=$1
shift shift
if [ -f $diffdir/build.inc ] ; then if [ -f $diffdir/build.inc ] ; then
timestamp=$(grep TIMESTAMP $diffdir/build.inc | awk '{print $3}' | tr -d '\015"')
timestamp=$(grep TIMESTAMP $diffdir/build.inc | awk '{print $3}' | tr -d '\015"')
echo diff build using $timestamp echo diff build using $timestamp
fi
fi
fi fi
# positional arguments # positional arguments
@ -65,7 +65,7 @@ romfmt=wbw_rom${romsize}
outdir=../../Binary outdir=../../Binary
echo "creating empty rom disk of size $romsize in $blankfile" echo "creating empty rom disk of size $romsize in $blankfile"
LC_CTYPE=en_US.US-ASCII tr '\000' '\345' </dev/zero | dd of=$blankfile bs=1024 count=`expr $romsize - 128`
dd of=$blankfile bs=1024 count=`expr $romsize - 128` < <(LC_CTYPE=en_US.US-ASCII tr '\000' '\345' </dev/zero)
cat <<- EOF > build.inc cat <<- EOF > build.inc
; RomWBW Configured for $platform $config $timestamp ; RomWBW Configured for $platform $config $timestamp

44
Source/HBIOS/Makefile

@ -1,25 +1,27 @@
OBJECTS =
ifndef ROM_CONFIG
ROM_CONFIG=std
endif
ifeq (1,1)
OBJECTS += DYNO_std.rom DYNO_std.com
OBJECTS += EZZ80_std.rom EZZ80_std.com
OBJECTS += MK4_std.rom MK4_std.com
OBJECTS += N8_std.rom N8_std.com
OBJECTS += RCZ180_ext.rom RCZ180_ext.com
OBJECTS += RCZ180_nat.rom RCZ180_nat.com
OBJECTS += RCZ80_kio.rom RCZ80_kio.com
OBJECTS += RCZ80_mt.rom RCZ80_mt.com
OBJECTS += RCZ80_std.rom RCZ80_std.com
OBJECTS += SBC_simh.rom SBC_simh.com
OBJECTS += SBC_std.rom SBC_std.com
OBJECTS += SCZ180_126.rom SCZ180_126.com
OBJECTS += SCZ180_130.rom SCZ180_130.com
OBJECTS += SCZ180_131.rom SCZ180_131.com
OBJECTS += UNA_std.rom
OBJECTS += ZETA_std.rom ZETA_std.com
OBJECTS += ZETA2_std.rom ZETA2_std.com
ifdef ROM_PLATFORM
OBJECTS = ${ROM_PLATFORM}_${ROM_CONFIG}.rom ${ROM_PLATFORM}_${ROM_CONFIG}.com
else else
OBJECTS += ZETA2_std.rom ZETA2_std.com
OBJECTS += DYNO_std.rom DYNO_std.com
OBJECTS += EZZ80_std.rom EZZ80_std.com
OBJECTS += MK4_std.rom MK4_std.com
OBJECTS += N8_std.rom N8_std.com
OBJECTS += RCZ180_ext.rom RCZ180_ext.com
OBJECTS += RCZ180_nat.rom RCZ180_nat.com
OBJECTS += RCZ80_kio.rom RCZ80_kio.com
OBJECTS += RCZ80_mt.rom RCZ80_mt.com
OBJECTS += RCZ80_std.rom RCZ80_std.com
OBJECTS += SBC_simh.rom SBC_simh.com
OBJECTS += SBC_std.rom SBC_std.com
OBJECTS += SCZ180_126.rom SCZ180_126.com
OBJECTS += SCZ180_130.rom SCZ180_130.com
OBJECTS += SCZ180_131.rom SCZ180_131.com
OBJECTS += UNA_std.rom
OBJECTS += ZETA_std.rom ZETA_std.com
OBJECTS += ZETA2_std.rom ZETA2_std.com
endif endif
MOREDIFF = camel80.bin game.bin hbios_rom.bin nascom.bin prefix.bin usrrom.bin \ MOREDIFF = camel80.bin game.bin hbios_rom.bin nascom.bin prefix.bin usrrom.bin \
@ -27,7 +29,7 @@ MOREDIFF = camel80.bin game.bin hbios_rom.bin nascom.bin prefix.bin usrrom.bin \
eastaegg.bin hbios_img.bin imgpad.bin osimg.bin tastybasic.bin \ eastaegg.bin hbios_img.bin imgpad.bin osimg.bin tastybasic.bin \
game.bin usrrom.bin game.bin usrrom.bin
SUBDIRS =
SUBDIRS =
DEST = ../../Binary DEST = ../../Binary
TOOLS =../../Tools TOOLS =../../Tools
OTHERS = *.img *.rom *.com *.bin *.z80 cpm.sys zsys.sys Build.inc RomDisk.tmp font*.asm *.dat OTHERS = *.img *.rom *.com *.bin *.z80 cpm.sys zsys.sys Build.inc RomDisk.tmp font*.asm *.dat

57
Source/HBIOS/cvdu.asm

@ -96,6 +96,7 @@ CVDU_FNTBL:
.DW KBD_READ .DW KBD_READ
#IF (($ - CVDU_FNTBL) != (VDA_FNCNT * 2)) #IF (($ - CVDU_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID CVDU FUNCTION TABLE ***\n" .ECHO "*** INVALID CVDU FUNCTION TABLE ***\n"
FAIL
#ENDIF #ENDIF
CVDU_VDAINI: CVDU_VDAINI:
@ -112,11 +113,11 @@ CVDU_VDAQRY:
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
CVDU_VDARES: CVDU_VDARES:
LD A,$0E ; ATTRIBUTE IS STANDARD WHITE ON BLACK LD A,$0E ; ATTRIBUTE IS STANDARD WHITE ON BLACK
LD (CVDU_ATTR),A ; SAVE IT LD (CVDU_ATTR),A ; SAVE IT
LD DE,0 ; ROW = 0, COL = 0 LD DE,0 ; ROW = 0, COL = 0
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT CALL CVDU_XY ; SEND CURSOR TO TOP LEFT
LD A,' ' ; BLANK THE SCREEN LD A,' ' ; BLANK THE SCREEN
@ -124,7 +125,7 @@ CVDU_VDARES:
CALL CVDU_FILL ; DO IT CALL CVDU_FILL ; DO IT
LD DE,0 ; ROW = 0, COL = 0 LD DE,0 ; ROW = 0, COL = 0
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT CALL CVDU_XY ; SEND CURSOR TO TOP LEFT
XOR A XOR A
RET RET
@ -133,15 +134,15 @@ CVDU_VDADEV:
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
CVDU_VDASCS: CVDU_VDASCS:
CALL PANIC ; NOT IMPLEMENTED (YET) CALL PANIC ; NOT IMPLEMENTED (YET)
CVDU_VDASCP: CVDU_VDASCP:
CALL CVDU_XY ; SET CURSOR POSITION CALL CVDU_XY ; SET CURSOR POSITION
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
CVDU_VDASAT: CVDU_VDASAT:
; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK) ; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK)
; TRANSFORM TO: -RUB---- ; TRANSFORM TO: -RUB----
@ -158,7 +159,7 @@ CVDU_VDASAT:
LD (CVDU_ATTR),A ; AND SAVE THE RESULT LD (CVDU_ATTR),A ; AND SAVE THE RESULT
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
CVDU_VDASCO: CVDU_VDASCO:
; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED) ; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED)
; TRANSFORM TO: ----RGBI (DISCARD BACKGROUND COLOR IN HIGH NIBBLE) ; TRANSFORM TO: ----RGBI (DISCARD BACKGROUND COLOR IN HIGH NIBBLE)
@ -175,13 +176,13 @@ CVDU_VDASCO1:
LD (CVDU_ATTR),A ; AND SAVE THE RESULT LD (CVDU_ATTR),A ; AND SAVE THE RESULT
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
CVDU_VDAWRC: CVDU_VDAWRC:
LD A,E ; CHARACTER TO WRITE GOES IN A LD A,E ; CHARACTER TO WRITE GOES IN A
CALL CVDU_PUTCHAR ; PUT IT ON THE SCREEN CALL CVDU_PUTCHAR ; PUT IT ON THE SCREEN
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
CVDU_VDAFIL: CVDU_VDAFIL:
LD A,E ; FILL CHARACTER GOES IN A LD A,E ; FILL CHARACTER GOES IN A
EX DE,HL ; FILL LENGTH GOES IN DE EX DE,HL ; FILL LENGTH GOES IN DE
@ -197,7 +198,7 @@ CVDU_VDACPY:
POP BC ; RECOVER LENGTH IN BC POP BC ; RECOVER LENGTH IN BC
LD DE,(CVDU_POS) ; PUT DEST IN DE LD DE,(CVDU_POS) ; PUT DEST IN DE
JP CVDU_BLKCPY ; DO A BLOCK COPY JP CVDU_BLKCPY ; DO A BLOCK COPY
CVDU_VDASCR: CVDU_VDASCR:
LD A,E ; LOAD E INTO A LD A,E ; LOAD E INTO A
OR A ; SET FLAGS OR A ; SET FLAGS
@ -246,7 +247,7 @@ CVDU_WRX:
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
; READ M8563 REGISTERS ; READ M8563 REGISTERS
; CVDU_RD READS VDU REGISTER SPECIFIED IN C AND RETURNS VALUE IN A ; CVDU_RD READS VDU REGISTER SPECIFIED IN C AND RETURNS VALUE IN A
; CVDU_RDX READS VDU REGISTER PAIR SPECIFIED BY C, C+1
; CVDU_RDX READS VDU REGISTER PAIR SPECIFIED BY C, C+1
; AND RETURNS VALUE IN HL ; AND RETURNS VALUE IN HL
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
; ;
@ -317,7 +318,7 @@ CVDU_CRTINIT1:
; ASSUMES THAT VDU RAM SIZE IS SET FOR 64KB ABOVE ; ASSUMES THAT VDU RAM SIZE IS SET FOR 64KB ABOVE
; A. WRITE ZERO TO ADDRESS $0000 ; A. WRITE ZERO TO ADDRESS $0000
; B. WRITE NON-ZERO TO ADDRESS $0100 ; B. WRITE NON-ZERO TO ADDRESS $0100
; C. CHECK THE VALUE IN ADDRESS $0000; IF IT CHANGED,
; C. CHECK THE VALUE IN ADDRESS $0000; IF IT CHANGED,
; 16K DRAM CHIPS INSTALLED; IF NOT, 64K DRAM CHIPS INSTALLED ; 16K DRAM CHIPS INSTALLED; IF NOT, 64K DRAM CHIPS INSTALLED
; IF 16KB RAM DETECTED, ADJUST VDU REGISTERS APPROPRIATELY ; IF 16KB RAM DETECTED, ADJUST VDU REGISTERS APPROPRIATELY
; ;
@ -367,7 +368,7 @@ CVDU_LOADFONT:
LD (CVDU_STACK),SP ; SAVE STACK LD (CVDU_STACK),SP ; SAVE STACK
LD HL,(CVDU_STACK) ; AND SHIFT IT LD HL,(CVDU_STACK) ; AND SHIFT IT
LD DE,$2000 ; DOWN 4KB TO LD DE,$2000 ; DOWN 4KB TO
CCF ; CREATE A
CCF ; CREATE A
SBC HL,DE ; DECOMPRESSION BUFFER SBC HL,DE ; DECOMPRESSION BUFFER
LD SP,HL ; HL POINTS TO BUFFER LD SP,HL ; HL POINTS TO BUFFER
EX DE,HL ; START OF STACK BUFFER EX DE,HL ; START OF STACK BUFFER
@ -475,19 +476,19 @@ CVDU_FILL:
POP DE ; RECOVER FILL COUNT POP DE ; RECOVER FILL COUNT
LD A,(CVDU_ATTR) ; SET ATTRIBUTE VALUE FOR ATTRIBUTE FILL LD A,(CVDU_ATTR) ; SET ATTRIBUTE VALUE FOR ATTRIBUTE FILL
JR CVDU_FILL1 ; DO ATTRIBUTE FILL AND RETURN JR CVDU_FILL1 ; DO ATTRIBUTE FILL AND RETURN
CVDU_FILL1: CVDU_FILL1:
LD B,A ; SAVE REQUESTED FILL VALUE LD B,A ; SAVE REQUESTED FILL VALUE
; CHECK FOR VALID FILL LENGTH ; CHECK FOR VALID FILL LENGTH
LD A,D ; LOAD D LD A,D ; LOAD D
OR E ; OR WITH E OR E ; OR WITH E
RET Z ; BAIL OUT IF LENGTH OF ZERO SPECIFIED RET Z ; BAIL OUT IF LENGTH OF ZERO SPECIFIED
; POINT TO BUFFER LOCATION TO START FILL ; POINT TO BUFFER LOCATION TO START FILL
LD C,18 ; UPDATE ADDRESS REGISTER PAIR LD C,18 ; UPDATE ADDRESS REGISTER PAIR
CALL CVDU_WRX ; DO IT CALL CVDU_WRX ; DO IT
; SET MODE TO BLOCK WRITE ; SET MODE TO BLOCK WRITE
LD C,24 ; BLOCK MODE CONTROL REGISTER LD C,24 ; BLOCK MODE CONTROL REGISTER
CALL CVDU_RD ; GET CURRENT VALUE CALL CVDU_RD ; GET CURRENT VALUE
@ -499,7 +500,7 @@ CVDU_FILL1:
LD C,31 ; DATA REGISTER LD C,31 ; DATA REGISTER
CALL CVDU_WR ; DO IT CALL CVDU_WR ; DO IT
DEC DE ; REFLECT ONE CHARACTER WRITTEN DEC DE ; REFLECT ONE CHARACTER WRITTEN
; LOOP TO DO BULK WRITE (UP TO 255 BYTES PER LOOP) ; LOOP TO DO BULK WRITE (UP TO 255 BYTES PER LOOP)
EX DE,HL ; NOW USE HL FOR COUNT EX DE,HL ; NOW USE HL FOR COUNT
LD C,30 ; BYTE COUNT REGISTER LD C,30 ; BYTE COUNT REGISTER
@ -527,7 +528,7 @@ CVDU_SCROLL:
LD A,' ' ; CHAR VALUE TO FILL NEW EXPOSED LINE LD A,' ' ; CHAR VALUE TO FILL NEW EXPOSED LINE
LD HL,0 ; SOURCE ADDRESS OF CHARACER BUFFER LD HL,0 ; SOURCE ADDRESS OF CHARACER BUFFER
CALL CVDU_SCROLL1 ; SCROLL CHARACTER BUFFER CALL CVDU_SCROLL1 ; SCROLL CHARACTER BUFFER
; SCROLL THE ATTRIBUTE BUFFER ; SCROLL THE ATTRIBUTE BUFFER
LD A,(CVDU_ATTR) ; ATTRIBUTE VALUE TO FILL NEW EXPOSED LINE LD A,(CVDU_ATTR) ; ATTRIBUTE VALUE TO FILL NEW EXPOSED LINE
LD HL,$800 ; SOURCE ADDRESS OF ATTRIBUTE BUFFER LD HL,$800 ; SOURCE ADDRESS OF ATTRIBUTE BUFFER
@ -535,7 +536,7 @@ CVDU_SCROLL:
CVDU_SCROLL1: CVDU_SCROLL1:
PUSH AF ; SAVE FILL VALUE FOR NOW PUSH AF ; SAVE FILL VALUE FOR NOW
; SET MODE TO BLOCK COPY ; SET MODE TO BLOCK COPY
LD C,24 ; BLOCK MODE CONTROL REGISTER LD C,24 ; BLOCK MODE CONTROL REGISTER
CALL CVDU_RD ; GET CURRENT VALUE CALL CVDU_RD ; GET CURRENT VALUE
@ -563,13 +564,13 @@ CVDU_SCROLL2:
; LOOP TILL DONE WITH ALL LINES ; LOOP TILL DONE WITH ALL LINES
DJNZ CVDU_SCROLL2 ; REPEAT FOR ALL LINES DJNZ CVDU_SCROLL2 ; REPEAT FOR ALL LINES
; SET MODE TO BLOCK WRITE TO CLEAR NEW LINE EXPOSED BY SCROLL ; SET MODE TO BLOCK WRITE TO CLEAR NEW LINE EXPOSED BY SCROLL
LD C,24 ; BLOCK MODE CONTROL REGISTER LD C,24 ; BLOCK MODE CONTROL REGISTER
CALL CVDU_RD ; GET CURRENT VALUE CALL CVDU_RD ; GET CURRENT VALUE
AND $7F ; CLEAR BIT 7 FOR FILL MODE AND $7F ; CLEAR BIT 7 FOR FILL MODE
CALL CVDU_WR ; DO IT CALL CVDU_WR ; DO IT
; SET VALUE TO WRITE ; SET VALUE TO WRITE
POP AF ; RESTORE THE FILL VALUE PASSED IN POP AF ; RESTORE THE FILL VALUE PASSED IN
LD C,31 ; DATA REGISTER LD C,31 ; DATA REGISTER
@ -579,7 +580,7 @@ CVDU_SCROLL2:
LD A,CVDU_COLS - 1 ; SET WRITE COUNT TO LINE LENGTH - 1 (1 CHAR ALREADY WRITTEN) LD A,CVDU_COLS - 1 ; SET WRITE COUNT TO LINE LENGTH - 1 (1 CHAR ALREADY WRITTEN)
LD C,30 ; WORD COUNT REGISTER LD C,30 ; WORD COUNT REGISTER
CALL CVDU_WR ; DO IT CALL CVDU_WR ; DO IT
RET RET
; ;
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
@ -591,7 +592,7 @@ CVDU_RSCROLL:
LD A,' ' ; CHAR VALUE TO FILL NEW EXPOSED LINE LD A,' ' ; CHAR VALUE TO FILL NEW EXPOSED LINE
LD HL,$0 + ((CVDU_ROWS - 1) * CVDU_COLS) ; SOURCE ADDRESS OF CHARACER BUFFER LD HL,$0 + ((CVDU_ROWS - 1) * CVDU_COLS) ; SOURCE ADDRESS OF CHARACER BUFFER
CALL CVDU_RSCROLL1 ; SCROLL CHARACTER BUFFER CALL CVDU_RSCROLL1 ; SCROLL CHARACTER BUFFER
; SCROLL THE ATTRIBUTE BUFFER ; SCROLL THE ATTRIBUTE BUFFER
LD A,(CVDU_ATTR) ; ATTRIBUTE VALUE TO FILL NEW EXPOSED LINE LD A,(CVDU_ATTR) ; ATTRIBUTE VALUE TO FILL NEW EXPOSED LINE
LD HL,$800 + ((CVDU_ROWS - 1) * CVDU_COLS) ; SOURCE ADDRESS OF ATTRIBUTE BUFFER LD HL,$800 + ((CVDU_ROWS - 1) * CVDU_COLS) ; SOURCE ADDRESS OF ATTRIBUTE BUFFER
@ -599,7 +600,7 @@ CVDU_RSCROLL:
CVDU_RSCROLL1: CVDU_RSCROLL1:
PUSH AF ; SAVE FILL VALUE FOR NOW PUSH AF ; SAVE FILL VALUE FOR NOW
; SET MODE TO BLOCK COPY ; SET MODE TO BLOCK COPY
LD C,24 ; BLOCK MODE CONTROL REGISTER LD C,24 ; BLOCK MODE CONTROL REGISTER
CALL CVDU_RD ; GET CURRENT VALUE CALL CVDU_RD ; GET CURRENT VALUE
@ -629,7 +630,7 @@ CVDU_RSCROLL2:
CALL CVDU_WR ; DO IT CALL CVDU_WR ; DO IT
DJNZ CVDU_RSCROLL2 ; REPEAT FOR ALL LINES DJNZ CVDU_RSCROLL2 ; REPEAT FOR ALL LINES
; SET FILL DESTINATION (USING HL PASSED IN) ; SET FILL DESTINATION (USING HL PASSED IN)
LD C,18 ; UPDATE ADDRESS (DESTINATION) REGISTER LD C,18 ; UPDATE ADDRESS (DESTINATION) REGISTER
CALL CVDU_WRX ; DO IT CALL CVDU_WRX ; DO IT
@ -639,7 +640,7 @@ CVDU_RSCROLL2:
CALL CVDU_RD ; GET CURRENT VALUE CALL CVDU_RD ; GET CURRENT VALUE
AND $7F ; CLEAR BIT 7 FOR FILL MODE AND $7F ; CLEAR BIT 7 FOR FILL MODE
CALL CVDU_WR ; DO IT CALL CVDU_WR ; DO IT
; SET VALUE TO WRITE ; SET VALUE TO WRITE
POP AF ; RESTORE THE FILL VALUE PASSED IN POP AF ; RESTORE THE FILL VALUE PASSED IN
LD C,31 ; DATA REGISTER LD C,31 ; DATA REGISTER
@ -649,7 +650,7 @@ CVDU_RSCROLL2:
LD A,CVDU_COLS - 1 ; SET WRITE COUNT TO LINE LENGTH - 1 (1 CHAR ALREADY WRITTEN) LD A,CVDU_COLS - 1 ; SET WRITE COUNT TO LINE LENGTH - 1 (1 CHAR ALREADY WRITTEN)
LD C,30 ; WORD COUNT REGISTER LD C,30 ; WORD COUNT REGISTER
CALL CVDU_WR ; DO IT CALL CVDU_WR ; DO IT
RET RET
; ;
;---------------------------------------------------------------------- ;----------------------------------------------------------------------

2
Source/HBIOS/romldr.asm

@ -738,7 +738,7 @@ diskboot5:
; ;
; Compute number of sectors to load ; Compute number of sectors to load
ld hl,(bb_cpmend) ; hl := end ld hl,(bb_cpmend) ; hl := end
ld de,(bb_cpmloc) ; de := start
ld de,(bb_cpmloc) ; de := start
or a ; clear carry or a ; clear carry
sbc hl,de ; hl := length to load sbc hl,de ; hl := length to load
ld a,h ; determine 512 byte sector count ld a,h ; determine 512 byte sector count

1
Source/HBIOS/tms.asm

@ -136,6 +136,7 @@ TMS_FNTBL:
#ENDIF #ENDIF
#IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2)) #IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID TMS FUNCTION TABLE ***\n" .ECHO "*** INVALID TMS FUNCTION TABLE ***\n"
FAIL
#ENDIF #ENDIF
TMS_VDAINI: TMS_VDAINI:

30
Source/HBIOS/util.asm

@ -295,7 +295,7 @@ DB_CONTD:
JP DB_BLKRD ; JP DB_BLKRD ;
DB_END: DB_END:
RET
RET
; ;
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $ ; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $
; C REGISTER CONTAINS THE INDEX TO THE STRING TO BE DISPLAYED. ; C REGISTER CONTAINS THE INDEX TO THE STRING TO BE DISPLAYED.
@ -322,7 +322,7 @@ PRTIDXMSK1:
POP BC POP BC
; ;
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $ ; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; TO THE START OF THE STRING LIST. ; TO THE START OF THE STRING LIST.
; ;
; SLOW BUT IMPROVES CODE SIZE, READABILITY AND ELIMINATES THE NEED HAVE ; SLOW BUT IMPROVES CODE SIZE, READABILITY AND ELIMINATES THE NEED HAVE
@ -410,7 +410,7 @@ XREGDMP:
LD A,'@' LD A,'@'
CALL COUT CALL COUT
POP AF POP AF
PUSH BC PUSH BC
LD BC,(REGDMP_PC) LD BC,(REGDMP_PC)
CALL PRTHEXWORD ; PC CALL PRTHEXWORD ; PC
@ -434,7 +434,7 @@ XREGDMP:
CALL PC_COLON CALL PC_COLON
LD BC,(REGDMP_SP) LD BC,(REGDMP_SP)
CALL PRTHEXWORD ; SP CALL PRTHEXWORD ; SP
CALL PC_COLON CALL PC_COLON
PUSH IX PUSH IX
POP BC POP BC
@ -454,7 +454,7 @@ XREGDMP:
POP AF POP AF
;LD SP,(RD_STKSAV) ; BACK TO ORIGINAL STACK FRAME ;LD SP,(RD_STKSAV) ; BACK TO ORIGINAL STACK FRAME
JP $FFFF ; RETURN, $FFFF IS DYNAMICALLY UPDATED JP $FFFF ; RETURN, $FFFF IS DYNAMICALLY UPDATED
REGDMP_RET .EQU $-2 ; RETURN ADDRESS GOES HERE REGDMP_RET .EQU $-2 ; RETURN ADDRESS GOES HERE
; ;
@ -666,8 +666,8 @@ DELAY_INIT:
#IF (BIOS == BIOS_UNA) #IF (BIOS == BIOS_UNA)
LD C,$F8 ; UNA BIOS GET PHI FUNCTION LD C,$F8 ; UNA BIOS GET PHI FUNCTION
RST 08 ; RETURNS SPEED IN HZ IN DE:HL RST 08 ; RETURNS SPEED IN HZ IN DE:HL
LD B,4 ; DIVIDE MHZ IN DE:HL BY 100000H
DELAY_INIT0:
LD B,4 ; DIVIDE MHZ IN DE:HL BY 100000H
DELAY_INIT0:
SRL D ; ... TO GET APPROX CPU SPEED IN SRL D ; ... TO GET APPROX CPU SPEED IN
RR E ; ...MHZ. THROW AWAY HL, AND RR E ; ...MHZ. THROW AWAY HL, AND
DJNZ DELAY_INIT0 ; ...RIGHT SHIFT DE BY 4. DJNZ DELAY_INIT0 ; ...RIGHT SHIFT DE BY 4.
@ -772,13 +772,13 @@ DIV16:
DIV16A: DIV16A:
SCF SCF
RL C RL C
RLA
ADC HL,HL
SBC HL,DE
JR NC,DIV16B
ADD HL,DE
DEC C
DIV16B:
RLA
ADC HL,HL
SBC HL,DE
JR NC,DIV16B
ADD HL,DE
DEC C
DIV16B:
DJNZ DIV16A ; LOOP AS NEEDED DJNZ DIV16A ; LOOP AS NEEDED
LD B,A ; AC -> BC LD B,A ; AC -> BC
LD A,H ; SET ZF LD A,H ; SET ZF
@ -985,7 +985,7 @@ SUB32:
RET RET
; ;
; INC32 (HL) ; INC32 (HL)
; INCREMENT 32 BIT BINARY AT ADDRESS
; INCREMENT 32 BIT BINARY AT ADDRESS
; ;
INC32HL: INC32HL:
INC (HL) INC (HL)

57
Source/HBIOS/vdu.asm

@ -47,40 +47,40 @@ VDU_BLNK .EQU VDU_NOBL ; DEFAULT BLINK RATE
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
; ;
#IF (VDUSIZ=V80X24) #IF (VDUSIZ=V80X24)
DLINES .EQU 24
DLINES .EQU 24
DROWS .EQU 80 DROWS .EQU 80
DSCANL .EQU 10 DSCANL .EQU 10
#ENDIF #ENDIF
#IF (VDUSIZ=V80X25) #IF (VDUSIZ=V80X25)
DLINES .EQU 25
DLINES .EQU 25
DROWS .EQU 80 DROWS .EQU 80
DSCANL .EQU 10 DSCANL .EQU 10
#ENDIF #ENDIF
#IF (VDUSIZ=V80X30) #IF (VDUSIZ=V80X30)
DLINES .EQU 30
DLINES .EQU 30
DROWS .EQU 80 DROWS .EQU 80
DSCANL .EQU 8 DSCANL .EQU 8
#ENDIF #ENDIF
#IF (VDUSIZ=V80X25B) #IF (VDUSIZ=V80X25B)
DLINES .EQU 25
DLINES .EQU 25
DROWS .EQU 80 DROWS .EQU 80
DSCANL .EQU 12 DSCANL .EQU 12
#ENDIF #ENDIF
#IF (VDUSIZ=V80X24B) #IF (VDUSIZ=V80X24B)
DLINES .EQU 24
DLINES .EQU 24
DROWS .EQU 80 DROWS .EQU 80
DSCANL .EQU 12 DSCANL .EQU 12
#ENDIF #ENDIF
; ;
#IF VDU_CSTY=VDU_BLOK #IF VDU_CSTY=VDU_BLOK
VDU_R10 .EQU (VDU_BLNK + $00)
VDU_R10 .EQU (VDU_BLNK + $00)
VDU_R11 .EQU DSCANL-1 VDU_R11 .EQU DSCANL-1
#ENDIF #ENDIF
; ;
#IF VDU_CSTY=VDU_ULIN #IF VDU_CSTY=VDU_ULIN
VDU_R10 .EQU (VDU_BLNK + DSCANL-1)
VDU_R10 .EQU (VDU_BLNK + DSCANL-1)
VDU_R11 .EQU DSCANL-1 VDU_R11 .EQU DSCANL-1
#ENDIF
#ENDIF
; ;
;====================================================================== ;======================================================================
; VDU DRIVER - INITIALIZATION ; VDU DRIVER - INITIALIZATION
@ -127,7 +127,7 @@ VDU_INIT1:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
;
;
;====================================================================== ;======================================================================
; VDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS ; VDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
;====================================================================== ;======================================================================
@ -150,6 +150,7 @@ VDU_FNTBL:
.DW PPK_READ .DW PPK_READ
#IF (($ - VDU_FNTBL) != (VDA_FNCNT * 2)) #IF (($ - VDU_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID VDU FUNCTION TABLE ***\n" .ECHO "*** INVALID VDU FUNCTION TABLE ***\n"
FAIL
#ENDIF #ENDIF
VDU_VDAINI: VDU_VDAINI:
@ -165,7 +166,7 @@ VDU_VDAQRY:
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
VDU_VDARES: VDU_VDARES:
LD DE,0 LD DE,0
LD (VDU_OFFSET),DE LD (VDU_OFFSET),DE
@ -202,26 +203,26 @@ VDU_VDASCS:
XOR A XOR A
RET RET
VDU_VDASCP: VDU_VDASCP:
CALL VDU_XY CALL VDU_XY
XOR A XOR A
RET RET
VDU_VDASAT: VDU_VDASAT:
XOR A XOR A
RET RET
VDU_VDASCO: VDU_VDASCO:
XOR A XOR A
RET RET
VDU_VDAWRC: VDU_VDAWRC:
LD A,E LD A,E
CALL VDU_PUTCHAR CALL VDU_PUTCHAR
XOR A XOR A
RET RET
VDU_VDAFIL: VDU_VDAFIL:
LD A,E ; FILL CHARACTER GOES IN A LD A,E ; FILL CHARACTER GOES IN A
EX DE,HL ; FILL LENGTH GOES IN DE EX DE,HL ; FILL LENGTH GOES IN DE
@ -236,9 +237,9 @@ VDU_VDACPY:
POP BC ; RECOVER LENGTH IN BC POP BC ; RECOVER LENGTH IN BC
LD DE,(VDU_POS) ; PUT DEST IN DE LD DE,(VDU_POS) ; PUT DEST IN DE
JP VDU_BLKCPY ; DO A BLOCK COPY JP VDU_BLKCPY ; DO A BLOCK COPY
RET RET
VDU_VDASCR: VDU_VDASCR:
LD A,E ; LOAD E INTO A LD A,E ; LOAD E INTO A
OR A ; SET FLAGS OR A ; SET FLAGS
@ -293,7 +294,7 @@ VDU_WRREGX:
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
; READ SY6845 REGISTERS ; READ SY6845 REGISTERS
; VDU_RDREG READS VDU REGISTER SPECIFIED IN C AND RETURNS VALUE IN A ; VDU_RDREG READS VDU REGISTER SPECIFIED IN C AND RETURNS VALUE IN A
; VDU_RDREGX READS VDU REGISTER PAIR SPECIFIED BY C, C+1
; VDU_RDREGX READS VDU REGISTER PAIR SPECIFIED BY C, C+1
; AND RETURNS VALUE IN HL ; AND RETURNS VALUE IN HL
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
; ;
@ -398,13 +399,13 @@ VDU_PUTCHAR:
INC HL ; NEW CURSOR POSITION INC HL ; NEW CURSOR POSITION
LD C,14 ; CURSOR POSITION REGISTER PAIR LD C,14 ; CURSOR POSITION REGISTER PAIR
CALL VDU_WRREGX ; DO IT CALL VDU_WRREGX ; DO IT
LD A,31 ; PREP VDU FOR DATA R/W LD A,31 ; PREP VDU FOR DATA R/W
OUT (VDU_REG),A OUT (VDU_REG),A
CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY
LD A,B LD A,B
OUT (VDU_RAMWR),A ; OUTPUT CHAR TO VDU OUT (VDU_RAMWR),A ; OUTPUT CHAR TO VDU
RET RET
; ;
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
@ -431,7 +432,7 @@ VDU_FILL:
OUT (VDU_REG),A OUT (VDU_REG),A
VDU_FILL1: VDU_FILL1:
LD A,D ; CHECK NUMBER OF FILL CHARS LEFT LD A,D ; CHECK NUMBER OF FILL CHARS LEFT
OR E
OR E
RET Z ; ALL DONE, RETURN RET Z ; ALL DONE, RETURN
CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY
LD A,B LD A,B
@ -481,7 +482,7 @@ VDU_BLKCPY1: ; VIDEO RAM -> BUFFER COPY LOOP
OUT (VDU_REG),A ; DO IT OUT (VDU_REG),A ; DO IT
LD HL,VDU_BUF ; HL POINTS TO WORK BUFFER LD HL,VDU_BUF ; HL POINTS TO WORK BUFFER
LD C,VDU_RAMWR ; LOAD C WITH VDU WRITE REGISTER LD C,VDU_RAMWR ; LOAD C WITH VDU WRITE REGISTER
VDU_BLKCPY2: ; BUFFER -> VIDEO RAM COPY LOOP VDU_BLKCPY2: ; BUFFER -> VIDEO RAM COPY LOOP
CALL VDU_WAITRDY ; WAIT FOR VDU CALL VDU_WAITRDY ; WAIT FOR VDU
OUTI ; WRITE BYTE, DEC B, INC HL OUTI ; WRITE BYTE, DEC B, INC HL
@ -501,7 +502,7 @@ VDU_SCROLL:
LD (VDU_OFFSET),HL LD (VDU_OFFSET),HL
LD C,12 LD C,12
CALL VDU_WRREGX CALL VDU_WRREGX
; FILL EXPOSED LINE ; FILL EXPOSED LINE
LD HL,(VDU_POS) LD HL,(VDU_POS)
PUSH HL PUSH HL
@ -512,7 +513,7 @@ VDU_SCROLL:
CALL VDU_FILL CALL VDU_FILL
POP HL POP HL
LD (VDU_POS),HL LD (VDU_POS),HL
; ADJUST CURSOR POSITION AND RETURN ; ADJUST CURSOR POSITION AND RETURN
LD HL,(VDU_OFFSET) LD HL,(VDU_OFFSET)
LD DE,(VDU_POS) LD DE,(VDU_POS)
@ -543,7 +544,7 @@ VDU_RSCROLL:
CALL VDU_FILL CALL VDU_FILL
POP HL POP HL
LD (VDU_POS),HL LD (VDU_POS),HL
; ADJUST CURSOR POSITION AND RETURN ; ADJUST CURSOR POSITION AND RETURN
LD HL,(VDU_OFFSET) LD HL,(VDU_OFFSET)
LD DE,(VDU_POS) LD DE,(VDU_POS)
@ -566,7 +567,7 @@ VDU_BUF .FILL 256,0 ; COPY BUFFER
; CCIR 625/50 VERSION (USED IN MOST OF THE WORLD) ; CCIR 625/50 VERSION (USED IN MOST OF THE WORLD)
; JUMPER K1 2-3, K2 1-2 FOR 2MHz CHAR CLOCK ; JUMPER K1 2-3, K2 1-2 FOR 2MHz CHAR CLOCK
; ;
; THE CCIR 625/50 TELEVISION STANDARD HAS 625 LINES INTERLACED AT 50 FIELDS PER SECOND. THIS WORKS
; THE CCIR 625/50 TELEVISION STANDARD HAS 625 LINES INTERLACED AT 50 FIELDS PER SECOND. THIS WORKS
; OUT AS 50 FIELDS OF 312.5 LINES PER SECOND NON-INTERLACED AS USED HERE. ; OUT AS 50 FIELDS OF 312.5 LINES PER SECOND NON-INTERLACED AS USED HERE.
; HORIZONTAL LINE WIDTH IS 64uS. FOR A 2 MHz CHARACTER CLOCK (R0+1)/2000000 = 64uS ; HORIZONTAL LINE WIDTH IS 64uS. FOR A 2 MHz CHARACTER CLOCK (R0+1)/2000000 = 64uS
; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5. ; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5.
@ -658,7 +659,7 @@ VDU_INIT6845:
.DB 00CH ; R3 SYNC WIDTHS .DB 00CH ; R3 SYNC WIDTHS
.DB 19H ; R4 VERTICAL TOTAL (TOTAL CHARS IN A FRAME -1) (312/DLINES)-1 .DB 19H ; R4 VERTICAL TOTAL (TOTAL CHARS IN A FRAME -1) (312/DLINES)-1
.DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL) .DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL)
.DB DLINES ; R6 VERTICAL DISPLAY
.DB DLINES ; R6 VERTICAL DISPLAY
.DB 019H ; R7 VERTICAL SYNC (DLINES .. R4) .DB 019H ; R7 VERTICAL SYNC (DLINES .. R4)
.DB 078H ; R8 MODE .DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1) .DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
@ -680,7 +681,7 @@ VDU_INIT6845:
.DB 00CH ; R3 SYNC WIDTHS .DB 00CH ; R3 SYNC WIDTHS
.DB 19H ; R4 VERTICAL TOTAL (TOTAL CHARS IN A FRAME -1) (312/DLINES)-1 .DB 19H ; R4 VERTICAL TOTAL (TOTAL CHARS IN A FRAME -1) (312/DLINES)-1
.DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL) .DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL)
.DB DLINES ; R6 VERTICAL DISPLAY
.DB DLINES ; R6 VERTICAL DISPLAY
.DB 018H ; R7 VERTICAL SYNC (DLINES .. R4) .DB 018H ; R7 VERTICAL SYNC (DLINES .. R4)
.DB 078H ; R8 MODE .DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1) .DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)

57
Source/HBIOS/vga.asm

@ -70,12 +70,12 @@ VGA_89BIT .EQU VGA_8BIT
#ENDIF #ENDIF
; ;
#IF VGA_CSTY=VGA_BLOK #IF VGA_CSTY=VGA_BLOK
VGA_R10 .EQU (VGA_BLNK + $00)
VGA_R10 .EQU (VGA_BLNK + $00)
VGA_R11 .EQU VGA_SCANL-1 VGA_R11 .EQU VGA_SCANL-1
#ENDIF #ENDIF
; ;
#IF VGA_CSTY=VGA_ULIN #IF VGA_CSTY=VGA_ULIN
VGA_R10 .EQU (VGA_BLNK + VGA_SCANL-1)
VGA_R10 .EQU (VGA_BLNK + VGA_SCANL-1)
VGA_R11 .EQU VGA_SCANL-1 VGA_R11 .EQU VGA_SCANL-1
#ENDIF #ENDIF
; ;
@ -85,7 +85,7 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
; ;
; DRIVER UTILIZES THE MULTIPLE DISPLAY WINDOW FEATURE OF THE CRTC TO ACCOMPLISH ; DRIVER UTILIZES THE MULTIPLE DISPLAY WINDOW FEATURE OF THE CRTC TO ACCOMPLISH
; FULL SCREEN SCROLLING WITHOUT THE NEED TO MOVE DISPLAY RAM BYTES. ; FULL SCREEN SCROLLING WITHOUT THE NEED TO MOVE DISPLAY RAM BYTES.
;
;
; SCREEN 1 IMPLICITLY STARTS AT PHYSICAL ROW 0 ; SCREEN 1 IMPLICITLY STARTS AT PHYSICAL ROW 0
; SCREEN 1 RAM ADDRESS POINTER POINTS TO SCREEN OFFSET (R12/R13) ; SCREEN 1 RAM ADDRESS POINTER POINTS TO SCREEN OFFSET (R12/R13)
; SCREEN 2 ROW DEFINES WHERE BUFFER BYTE 0 WILL BE DISPLAYED (R18) ; SCREEN 2 ROW DEFINES WHERE BUFFER BYTE 0 WILL BE DISPLAYED (R18)
@ -163,6 +163,7 @@ VGA_FNTBL:
.DW KBD_READ .DW KBD_READ
#IF (($ - VGA_FNTBL) != (VDA_FNCNT * 2)) #IF (($ - VGA_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID VGA FUNCTION TABLE ***\n" .ECHO "*** INVALID VGA FUNCTION TABLE ***\n"
FAIL
#ENDIF #ENDIF
VGA_VDAINI: VGA_VDAINI:
@ -179,13 +180,13 @@ VGA_VDAQRY:
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
VGA_VDARES: VGA_VDARES:
LD A,$07 ; ATTRIBUTE IS STANDARD WHITE ON BLACK LD A,$07 ; ATTRIBUTE IS STANDARD WHITE ON BLACK
LD (VGA_ATTR),A ; SAVE IT LD (VGA_ATTR),A ; SAVE IT
XOR A ; ZERO (REVERSE, UNDERLINE, BLINK) XOR A ; ZERO (REVERSE, UNDERLINE, BLINK)
LD (VGA_RUB),A ; SAVE IT LD (VGA_RUB),A ; SAVE IT
LD DE,0 ; ROW = 0, COL = 0 LD DE,0 ; ROW = 0, COL = 0
CALL VGA_XY ; SEND CURSOR TO TOP LEFT CALL VGA_XY ; SEND CURSOR TO TOP LEFT
LD A,' ' ; BLANK THE SCREEN LD A,' ' ; BLANK THE SCREEN
@ -193,10 +194,10 @@ VGA_VDARES:
CALL VGA_FILL ; DO IT CALL VGA_FILL ; DO IT
LD DE,0 ; ROW = 0, COL = 0 LD DE,0 ; ROW = 0, COL = 0
CALL VGA_XY ; SEND CURSOR TO TOP LEFT CALL VGA_XY ; SEND CURSOR TO TOP LEFT
LD HL,$0404 | VGA_89BIT; SET VIDEO ENABLE BIT LD HL,$0404 | VGA_89BIT; SET VIDEO ENABLE BIT
CALL VGA_SETCFG ; DO IT CALL VGA_SETCFG ; DO IT
XOR A XOR A
RET RET
@ -205,15 +206,15 @@ VGA_VDADEV:
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
VGA_VDASCS: VGA_VDASCS:
CALL PANIC ; NOT IMPLEMENTED (YET) CALL PANIC ; NOT IMPLEMENTED (YET)
VGA_VDASCP: VGA_VDASCP:
CALL VGA_XY ; SET CURSOR POSITION CALL VGA_XY ; SET CURSOR POSITION
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
VGA_VDASAT: VGA_VDASAT:
; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK) ; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK)
; ;
@ -222,7 +223,7 @@ VGA_VDASAT:
LD A,E LD A,E
LD (VGA_RUB),A ; SAVE IT LD (VGA_RUB),A ; SAVE IT
JR VGA_VDASCO2 ; IMPLEMENT SETTING JR VGA_VDASCO2 ; IMPLEMENT SETTING
VGA_VDASCO: VGA_VDASCO:
; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED) ; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED)
; TRANSFORM TO: -RGBIRGB (DISCARD INTENSITY BIT IN HIGH NIBBLE) ; TRANSFORM TO: -RGBIRGB (DISCARD INTENSITY BIT IN HIGH NIBBLE)
@ -269,13 +270,13 @@ VGA_VDASCO2:
VGA_VDASCO3: VGA_VDASCO3:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
VGA_VDAWRC: VGA_VDAWRC:
LD A,E ; CHARACTER TO WRITE GOES IN A LD A,E ; CHARACTER TO WRITE GOES IN A
CALL VGA_PUTCHAR ; PUT IT ON THE SCREEN CALL VGA_PUTCHAR ; PUT IT ON THE SCREEN
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
VGA_VDAFIL: VGA_VDAFIL:
LD A,E ; FILL CHARACTER GOES IN A LD A,E ; FILL CHARACTER GOES IN A
EX DE,HL ; FILL LENGTH GOES IN DE EX DE,HL ; FILL LENGTH GOES IN DE
@ -291,7 +292,7 @@ VGA_VDACPY:
POP BC ; RECOVER LENGTH IN BC POP BC ; RECOVER LENGTH IN BC
LD DE,(VGA_POS) ; PUT DEST IN DE LD DE,(VGA_POS) ; PUT DEST IN DE
JP VGA_BLKCPY ; DO A BLOCK COPY JP VGA_BLKCPY ; DO A BLOCK COPY
VGA_VDASCR: VGA_VDASCR:
LD A,E ; LOAD E INTO A LD A,E ; LOAD E INTO A
OR A ; SET FLAGS OR A ; SET FLAGS
@ -522,7 +523,7 @@ VGA_LOADFONT:
LD (VGA_STACK),SP ; SAVE STACK LD (VGA_STACK),SP ; SAVE STACK
LD HL,(VGA_STACK) ; AND SHIFT IT LD HL,(VGA_STACK) ; AND SHIFT IT
LD DE,$2000 ; DOWN 4KB TO LD DE,$2000 ; DOWN 4KB TO
CCF ; CREATE A
CCF ; CREATE A
SBC HL,DE ; DECOMPRESSION BUFFER SBC HL,DE ; DECOMPRESSION BUFFER
LD SP,HL ; HL POINTS TO BUFFER LD SP,HL ; HL POINTS TO BUFFER
EX DE,HL ; START OF STACK BUFFER EX DE,HL ; START OF STACK BUFFER
@ -543,7 +544,7 @@ VGA_LOADFONT2:
INC HL ; NEXT FONT BYTE INC HL ; NEXT FONT BYTE
INC DE ; NEXT MEM BYTE INC DE ; NEXT MEM BYTE
DJNZ VGA_LOADFONT2 DJNZ VGA_LOADFONT2
LD BC,16-VGA_SCANL ; MOVE TO NEXT LD BC,16-VGA_SCANL ; MOVE TO NEXT
EX DE,HL ; 16 BYTE EX DE,HL ; 16 BYTE
ADD HL,BC ; CHARACTER ADD HL,BC ; CHARACTER
@ -586,7 +587,7 @@ VGA_XY2IDX:
CALL MULT8 ; MULTIPLY TO GET ROW OFFSET CALL MULT8 ; MULTIPLY TO GET ROW OFFSET
LD E,A ; GET COLUMN BACK LD E,A ; GET COLUMN BACK
ADD HL,DE ; ADD IT IN ADD HL,DE ; ADD IT IN
LD DE,(VGA_OFF) ; SCREEN OFFSET LD DE,(VGA_OFF) ; SCREEN OFFSET
ADD HL,DE ; ADJUST ADD HL,DE ; ADJUST
; ;
@ -651,7 +652,7 @@ VGA_FILL:
LD HL,(VGA_POS) ; GET CURRENT POSITION LD HL,(VGA_POS) ; GET CURRENT POSITION
SLA L ; MULTIPLY BY 2 SLA L ; MULTIPLY BY 2
RL H ; ... 2 BYTES PER CHAR RL H ; ... 2 BYTES PER CHAR
VGA_FILL1: VGA_FILL1:
; FILL ONE POSITION (CHAR & ATTR) ; FILL ONE POSITION (CHAR & ATTR)
LD C,VGA_HI ; C := VGA ADR HI LD C,VGA_HI ; C := VGA ADR HI
@ -669,7 +670,7 @@ VGA_FILL1:
#ENDIF #ENDIF
LD A,(VGA_ATTR) ; GET CUR ATTR LD A,(VGA_ATTR) ; GET CUR ATTR
OUT (C),A ; OUTPUT ATTR OUT (C),A ; OUTPUT ATTR
; CHECK COUNT ; CHECK COUNT
DEC DE ; DECREMENT COUNT DEC DE ; DECREMENT COUNT
LD A,D ; TEST FOR LD A,D ; TEST FOR
@ -755,7 +756,7 @@ VGA_SCROLL6:
LD (VGA_POS),HL ; SAVE IT LD (VGA_POS),HL ; SAVE IT
LD C,14 ; CURSOR 1 POS REG LD C,14 ; CURSOR 1 POS REG
CALL VGA_REGWRX ; COMMIT CALL VGA_REGWRX ; COMMIT
RET RET
; ;
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
@ -822,13 +823,13 @@ VGA_BLKCPY:
SLA C SLA C
RL B RL B
PUSH BC ; COUNT ==> TOS PUSH BC ; COUNT ==> TOS
; ADJUST HL & DE FOR SCREEN OFFSET/WRAP ; ADJUST HL & DE FOR SCREEN OFFSET/WRAP
CALL VGA_BLKCPY4 ; DO HL CALL VGA_BLKCPY4 ; DO HL
EX DE,HL ; SWAP EX DE,HL ; SWAP
CALL VGA_BLKCPY4 ; DO OTHER CALL VGA_BLKCPY4 ; DO OTHER
EX DE,HL ; SWAP BACK EX DE,HL ; SWAP BACK
VGA_BLKCPY1: VGA_BLKCPY1:
#IF (VGA_NICE) #IF (VGA_NICE)
CALL VGA_WAITSB ; WAIT FOR RETRACE CALL VGA_WAITSB ; WAIT FOR RETRACE
@ -842,7 +843,7 @@ VGA_BLKCPY1:
INC C ; C := VGA_DATA INC C ; C := VGA_DATA
IN A,(C) ; A := (HL) IN A,(C) ; A := (HL)
; COPY TO DESTINATION
; COPY TO DESTINATION
LD C,VGA_HI ; C := VGA_HI LD C,VGA_HI ; C := VGA_HI
OUT (C),D ; VGA_HI := SOURCE HI (H) OUT (C),D ; VGA_HI := SOURCE HI (H)
INC C ; C := VGA_LO INC C ; C := VGA_LO
@ -945,7 +946,7 @@ REGS_VGA:
.DB 18,-1 ; S2 ROW - 1 .DB 18,-1 ; S2 ROW - 1
.DB 27,12 ; VERT SYNC POS ADJ .DB 27,12 ; VERT SYNC POS ADJ
.DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ .DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ
.DB $FF ; END MARKER .DB $FF ; END MARKER
#ENDIF #ENDIF
#IF (VGASIZ=V80X30) #IF (VGASIZ=V80X30)
@ -966,7 +967,7 @@ REGS_VGA:
.DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK .DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK
.DB 11,VGA_R11 ; CURSOR END .DB 11,VGA_R11 ; CURSOR END
.DB 12,0 ; SCRN 1 START (HI) .DB 12,0 ; SCRN 1 START (HI)
.DB 13,0 ; SCRN 1 START (LO)
.DB 13,0 ; SCRN 1 START (LO)
.DB 18,-1 ; S2 ROW - 1 .DB 18,-1 ; S2 ROW - 1
.DB 27,0 ; VERT SYNC POS ADJ .DB 27,0 ; VERT SYNC POS ADJ
.DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ .DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ
@ -990,7 +991,7 @@ REGS_VGA:
.DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK .DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK
.DB 11,VGA_R11 ; CURSOR END .DB 11,VGA_R11 ; CURSOR END
.DB 12,0 ; SCRN 1 START (HI) .DB 12,0 ; SCRN 1 START (HI)
.DB 13,0 ; SCRN 1 START (LO)
.DB 13,0 ; SCRN 1 START (LO)
.DB 18,-1 ; S2 ROW - 1 .DB 18,-1 ; S2 ROW - 1
.DB 27,0 ; VERT SYNC POS ADJ .DB 27,0 ; VERT SYNC POS ADJ
.DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ .DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ
@ -998,7 +999,7 @@ REGS_VGA:
#ENDIF #ENDIF
#IF (VGASIZ=V80X60) #IF (VGASIZ=V80X60)
;=============================================================================== ;===============================================================================
; 80x60X8 60hz REGISTER VALUES
; 80x60X8 60hz REGISTER VALUES
;=============================================================================== ;===============================================================================
; ;
REGS_VGA: REGS_VGA:
@ -1014,7 +1015,7 @@ REGS_VGA:
.DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK .DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK
.DB 11,VGA_R11 ; CURSOR END .DB 11,VGA_R11 ; CURSOR END
.DB 12,0 ; SCRN 1 START (HI) .DB 12,0 ; SCRN 1 START (HI)
.DB 13,0 ; SCRN 1 START (LO)
.DB 13,0 ; SCRN 1 START (LO)
.DB 18,-1 ; S2 ROW - 1 .DB 18,-1 ; S2 ROW - 1
.DB 27,0 ; VERT SYNC POS ADJ .DB 27,0 ; VERT SYNC POS ADJ
.DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ .DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ

4
Tools/Makefile.inc

@ -94,6 +94,8 @@ ifeq ($(UNAME), Linux)
$(BSTC) -e -l $< $(BSTC) -e -l $<
endif endif
.ONESHELL:
# #
# darwin bstc won't run, since mac os does not do 32 bit binaries any more # darwin bstc won't run, since mac os does not do 32 bit binaries any more
# openspin ought to work # openspin ought to work
@ -108,7 +110,7 @@ endif
# #
all:: $(OBJECTS) all:: $(OBJECTS)
@for dir in $(SUBDIRS) ; do \ @for dir in $(SUBDIRS) ; do \
( echo "building in `pwd`/$$dir" ; cd "$$dir" ; make all ) ; \
( echo "building in `pwd`/$$dir" ; $(MAKE) --directory "$$dir" all ) ; \
done done
@if [ "$(DEST)" ] ; then for file in $(OBJECTS) ; do \ @if [ "$(DEST)" ] ; then for file in $(OBJECTS) ; do \
mkdir -p $(DEST) ; \ mkdir -p $(DEST) ; \

Loading…
Cancel
Save