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/PropIO.list
Source/Prop/Spin/PropIO2.list
Source/Prop/ParPortProp.list
Source/Prop/PropIO.list
Source/Prop/PropIO2.list
Source/ZPM3/bnkbios3.spr
Source/ZPM3/gencpm.com
Source/ZPM3/gencpm.com
@ -94,3 +97,6 @@ Source/ZPM3/gencpm.com
Source/ZPM3/startzpm.com
Source/ZPM3/zccp.com
Source/ZPM3/zpmldr.com
Source/ZPM3/genbnk.dat
Source/ZSDOS/zsdos.err

20
Makefile

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

6
Source/HBIOS/Build.sh

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

2
Source/HBIOS/romldr.asm

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

1
Source/HBIOS/tms.asm

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

30
Source/HBIOS/util.asm

@ -295,7 +295,7 @@ DB_CONTD:
JP DB_BLKRD ;
DB_END:
RET
RET
;
; 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.
@ -322,7 +322,7 @@ PRTIDXMSK1:
POP BC
;
; 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.
;
; SLOW BUT IMPROVES CODE SIZE, READABILITY AND ELIMINATES THE NEED HAVE
@ -410,7 +410,7 @@ XREGDMP:
LD A,'@'
CALL COUT
POP AF
PUSH BC
LD BC,(REGDMP_PC)
CALL PRTHEXWORD ; PC
@ -434,7 +434,7 @@ XREGDMP:
CALL PC_COLON
LD BC,(REGDMP_SP)
CALL PRTHEXWORD ; SP
CALL PC_COLON
PUSH IX
POP BC
@ -454,7 +454,7 @@ XREGDMP:
POP AF
;LD SP,(RD_STKSAV) ; BACK TO ORIGINAL STACK FRAME
JP $FFFF ; RETURN, $FFFF IS DYNAMICALLY UPDATED
REGDMP_RET .EQU $-2 ; RETURN ADDRESS GOES HERE
;
@ -666,8 +666,8 @@ DELAY_INIT:
#IF (BIOS == BIOS_UNA)
LD C,$F8 ; UNA BIOS GET PHI FUNCTION
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
RR E ; ...MHZ. THROW AWAY HL, AND
DJNZ DELAY_INIT0 ; ...RIGHT SHIFT DE BY 4.
@ -772,13 +772,13 @@ DIV16:
DIV16A:
SCF
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
LD B,A ; AC -> BC
LD A,H ; SET ZF
@ -985,7 +985,7 @@ SUB32:
RET
;
; INC32 (HL)
; INCREMENT 32 BIT BINARY AT ADDRESS
; INCREMENT 32 BIT BINARY AT ADDRESS
;
INC32HL:
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
;
#IF (VDUSIZ=V80X24)
DLINES .EQU 24
DLINES .EQU 24
DROWS .EQU 80
DSCANL .EQU 10
#ENDIF
#IF (VDUSIZ=V80X25)
DLINES .EQU 25
DLINES .EQU 25
DROWS .EQU 80
DSCANL .EQU 10
#ENDIF
#IF (VDUSIZ=V80X30)
DLINES .EQU 30
DLINES .EQU 30
DROWS .EQU 80
DSCANL .EQU 8
#ENDIF
#IF (VDUSIZ=V80X25B)
DLINES .EQU 25
DLINES .EQU 25
DROWS .EQU 80
DSCANL .EQU 12
#ENDIF
#IF (VDUSIZ=V80X24B)
DLINES .EQU 24
DLINES .EQU 24
DROWS .EQU 80
DSCANL .EQU 12
#ENDIF
;
#IF VDU_CSTY=VDU_BLOK
VDU_R10 .EQU (VDU_BLNK + $00)
VDU_R10 .EQU (VDU_BLNK + $00)
VDU_R11 .EQU DSCANL-1
#ENDIF
;
#IF VDU_CSTY=VDU_ULIN
VDU_R10 .EQU (VDU_BLNK + DSCANL-1)
VDU_R10 .EQU (VDU_BLNK + DSCANL-1)
VDU_R11 .EQU DSCANL-1
#ENDIF
#ENDIF
;
;======================================================================
; VDU DRIVER - INITIALIZATION
@ -127,7 +127,7 @@ VDU_INIT1:
XOR A ; SIGNAL SUCCESS
RET
;
;
;======================================================================
; VDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
;======================================================================
@ -150,6 +150,7 @@ VDU_FNTBL:
.DW PPK_READ
#IF (($ - VDU_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID VDU FUNCTION TABLE ***\n"
FAIL
#ENDIF
VDU_VDAINI:
@ -165,7 +166,7 @@ VDU_VDAQRY:
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED
XOR A ; SIGNAL SUCCESS
RET
VDU_VDARES:
LD DE,0
LD (VDU_OFFSET),DE
@ -202,26 +203,26 @@ VDU_VDASCS:
XOR A
RET
VDU_VDASCP:
CALL VDU_XY
XOR A
RET
VDU_VDASAT:
XOR A
RET
VDU_VDASCO:
XOR A
RET
VDU_VDAWRC:
LD A,E
CALL VDU_PUTCHAR
XOR A
RET
VDU_VDAFIL:
LD A,E ; FILL CHARACTER GOES IN A
EX DE,HL ; FILL LENGTH GOES IN DE
@ -236,9 +237,9 @@ VDU_VDACPY:
POP BC ; RECOVER LENGTH IN BC
LD DE,(VDU_POS) ; PUT DEST IN DE
JP VDU_BLKCPY ; DO A BLOCK COPY
RET
VDU_VDASCR:
LD A,E ; LOAD E INTO A
OR A ; SET FLAGS
@ -293,7 +294,7 @@ VDU_WRREGX:
;----------------------------------------------------------------------
; READ SY6845 REGISTERS
; 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
;----------------------------------------------------------------------
;
@ -398,13 +399,13 @@ VDU_PUTCHAR:
INC HL ; NEW CURSOR POSITION
LD C,14 ; CURSOR POSITION REGISTER PAIR
CALL VDU_WRREGX ; DO IT
LD A,31 ; PREP VDU FOR DATA R/W
OUT (VDU_REG),A
CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY
LD A,B
OUT (VDU_RAMWR),A ; OUTPUT CHAR TO VDU
RET
;
;----------------------------------------------------------------------
@ -431,7 +432,7 @@ VDU_FILL:
OUT (VDU_REG),A
VDU_FILL1:
LD A,D ; CHECK NUMBER OF FILL CHARS LEFT
OR E
OR E
RET Z ; ALL DONE, RETURN
CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY
LD A,B
@ -481,7 +482,7 @@ VDU_BLKCPY1: ; VIDEO RAM -> BUFFER COPY LOOP
OUT (VDU_REG),A ; DO IT
LD HL,VDU_BUF ; HL POINTS TO WORK BUFFER
LD C,VDU_RAMWR ; LOAD C WITH VDU WRITE REGISTER
VDU_BLKCPY2: ; BUFFER -> VIDEO RAM COPY LOOP
CALL VDU_WAITRDY ; WAIT FOR VDU
OUTI ; WRITE BYTE, DEC B, INC HL
@ -501,7 +502,7 @@ VDU_SCROLL:
LD (VDU_OFFSET),HL
LD C,12
CALL VDU_WRREGX
; FILL EXPOSED LINE
LD HL,(VDU_POS)
PUSH HL
@ -512,7 +513,7 @@ VDU_SCROLL:
CALL VDU_FILL
POP HL
LD (VDU_POS),HL
; ADJUST CURSOR POSITION AND RETURN
LD HL,(VDU_OFFSET)
LD DE,(VDU_POS)
@ -543,7 +544,7 @@ VDU_RSCROLL:
CALL VDU_FILL
POP HL
LD (VDU_POS),HL
; ADJUST CURSOR POSITION AND RETURN
LD HL,(VDU_OFFSET)
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)
; 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.
; 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.
@ -658,7 +659,7 @@ VDU_INIT6845:
.DB 00CH ; R3 SYNC WIDTHS
.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 DLINES ; R6 VERTICAL DISPLAY
.DB DLINES ; R6 VERTICAL DISPLAY
.DB 019H ; R7 VERTICAL SYNC (DLINES .. R4)
.DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
@ -680,7 +681,7 @@ VDU_INIT6845:
.DB 00CH ; R3 SYNC WIDTHS
.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 DLINES ; R6 VERTICAL DISPLAY
.DB DLINES ; R6 VERTICAL DISPLAY
.DB 018H ; R7 VERTICAL SYNC (DLINES .. R4)
.DB 078H ; R8 MODE
.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
;
#IF VGA_CSTY=VGA_BLOK
VGA_R10 .EQU (VGA_BLNK + $00)
VGA_R10 .EQU (VGA_BLNK + $00)
VGA_R11 .EQU VGA_SCANL-1
#ENDIF
;
#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
#ENDIF
;
@ -85,7 +85,7 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;
; DRIVER UTILIZES THE MULTIPLE DISPLAY WINDOW FEATURE OF THE CRTC TO ACCOMPLISH
; FULL SCREEN SCROLLING WITHOUT THE NEED TO MOVE DISPLAY RAM BYTES.
;
;
; SCREEN 1 IMPLICITLY STARTS AT PHYSICAL ROW 0
; SCREEN 1 RAM ADDRESS POINTER POINTS TO SCREEN OFFSET (R12/R13)
; SCREEN 2 ROW DEFINES WHERE BUFFER BYTE 0 WILL BE DISPLAYED (R18)
@ -163,6 +163,7 @@ VGA_FNTBL:
.DW KBD_READ
#IF (($ - VGA_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID VGA FUNCTION TABLE ***\n"
FAIL
#ENDIF
VGA_VDAINI:
@ -179,13 +180,13 @@ VGA_VDAQRY:
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
XOR A ; SIGNAL SUCCESS
RET
VGA_VDARES:
LD A,$07 ; ATTRIBUTE IS STANDARD WHITE ON BLACK
LD (VGA_ATTR),A ; SAVE IT
XOR A ; ZERO (REVERSE, UNDERLINE, BLINK)
LD (VGA_RUB),A ; SAVE IT
LD DE,0 ; ROW = 0, COL = 0
CALL VGA_XY ; SEND CURSOR TO TOP LEFT
LD A,' ' ; BLANK THE SCREEN
@ -193,10 +194,10 @@ VGA_VDARES:
CALL VGA_FILL ; DO IT
LD DE,0 ; ROW = 0, COL = 0
CALL VGA_XY ; SEND CURSOR TO TOP LEFT
LD HL,$0404 | VGA_89BIT; SET VIDEO ENABLE BIT
CALL VGA_SETCFG ; DO IT
XOR A
RET
@ -205,15 +206,15 @@ VGA_VDADEV:
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
XOR A ; SIGNAL SUCCESS
RET
VGA_VDASCS:
CALL PANIC ; NOT IMPLEMENTED (YET)
VGA_VDASCP:
CALL VGA_XY ; SET CURSOR POSITION
XOR A ; SIGNAL SUCCESS
RET
VGA_VDASAT:
; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK)
;
@ -222,7 +223,7 @@ VGA_VDASAT:
LD A,E
LD (VGA_RUB),A ; SAVE IT
JR VGA_VDASCO2 ; IMPLEMENT SETTING
VGA_VDASCO:
; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED)
; TRANSFORM TO: -RGBIRGB (DISCARD INTENSITY BIT IN HIGH NIBBLE)
@ -269,13 +270,13 @@ VGA_VDASCO2:
VGA_VDASCO3:
XOR A ; SIGNAL SUCCESS
RET
VGA_VDAWRC:
LD A,E ; CHARACTER TO WRITE GOES IN A
CALL VGA_PUTCHAR ; PUT IT ON THE SCREEN
XOR A ; SIGNAL SUCCESS
RET
VGA_VDAFIL:
LD A,E ; FILL CHARACTER GOES IN A
EX DE,HL ; FILL LENGTH GOES IN DE
@ -291,7 +292,7 @@ VGA_VDACPY:
POP BC ; RECOVER LENGTH IN BC
LD DE,(VGA_POS) ; PUT DEST IN DE
JP VGA_BLKCPY ; DO A BLOCK COPY
VGA_VDASCR:
LD A,E ; LOAD E INTO A
OR A ; SET FLAGS
@ -522,7 +523,7 @@ VGA_LOADFONT:
LD (VGA_STACK),SP ; SAVE STACK
LD HL,(VGA_STACK) ; AND SHIFT IT
LD DE,$2000 ; DOWN 4KB TO
CCF ; CREATE A
CCF ; CREATE A
SBC HL,DE ; DECOMPRESSION BUFFER
LD SP,HL ; HL POINTS TO BUFFER
EX DE,HL ; START OF STACK BUFFER
@ -543,7 +544,7 @@ VGA_LOADFONT2:
INC HL ; NEXT FONT BYTE
INC DE ; NEXT MEM BYTE
DJNZ VGA_LOADFONT2
LD BC,16-VGA_SCANL ; MOVE TO NEXT
EX DE,HL ; 16 BYTE
ADD HL,BC ; CHARACTER
@ -586,7 +587,7 @@ VGA_XY2IDX:
CALL MULT8 ; MULTIPLY TO GET ROW OFFSET
LD E,A ; GET COLUMN BACK
ADD HL,DE ; ADD IT IN
LD DE,(VGA_OFF) ; SCREEN OFFSET
ADD HL,DE ; ADJUST
;
@ -651,7 +652,7 @@ VGA_FILL:
LD HL,(VGA_POS) ; GET CURRENT POSITION
SLA L ; MULTIPLY BY 2
RL H ; ... 2 BYTES PER CHAR
VGA_FILL1:
; FILL ONE POSITION (CHAR & ATTR)
LD C,VGA_HI ; C := VGA ADR HI
@ -669,7 +670,7 @@ VGA_FILL1:
#ENDIF
LD A,(VGA_ATTR) ; GET CUR ATTR
OUT (C),A ; OUTPUT ATTR
; CHECK COUNT
DEC DE ; DECREMENT COUNT
LD A,D ; TEST FOR
@ -755,7 +756,7 @@ VGA_SCROLL6:
LD (VGA_POS),HL ; SAVE IT
LD C,14 ; CURSOR 1 POS REG
CALL VGA_REGWRX ; COMMIT
RET
;
;----------------------------------------------------------------------
@ -822,13 +823,13 @@ VGA_BLKCPY:
SLA C
RL B
PUSH BC ; COUNT ==> TOS
; ADJUST HL & DE FOR SCREEN OFFSET/WRAP
CALL VGA_BLKCPY4 ; DO HL
EX DE,HL ; SWAP
CALL VGA_BLKCPY4 ; DO OTHER
EX DE,HL ; SWAP BACK
VGA_BLKCPY1:
#IF (VGA_NICE)
CALL VGA_WAITSB ; WAIT FOR RETRACE
@ -842,7 +843,7 @@ VGA_BLKCPY1:
INC C ; C := VGA_DATA
IN A,(C) ; A := (HL)
; COPY TO DESTINATION
; COPY TO DESTINATION
LD C,VGA_HI ; C := VGA_HI
OUT (C),D ; VGA_HI := SOURCE HI (H)
INC C ; C := VGA_LO
@ -945,7 +946,7 @@ REGS_VGA:
.DB 18,-1 ; S2 ROW - 1
.DB 27,12 ; VERT SYNC POS ADJ
.DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ
.DB $FF ; END MARKER
#ENDIF
#IF (VGASIZ=V80X30)
@ -966,7 +967,7 @@ REGS_VGA:
.DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK
.DB 11,VGA_R11 ; CURSOR END
.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 27,0 ; VERT SYNC POS 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 11,VGA_R11 ; CURSOR END
.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 27,0 ; VERT SYNC POS ADJ
.DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ
@ -998,7 +999,7 @@ REGS_VGA:
#ENDIF
#IF (VGASIZ=V80X60)
;===============================================================================
; 80x60X8 60hz REGISTER VALUES
; 80x60X8 60hz REGISTER VALUES
;===============================================================================
;
REGS_VGA:
@ -1014,7 +1015,7 @@ REGS_VGA:
.DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK
.DB 11,VGA_R11 ; CURSOR END
.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 27,0 ; VERT SYNC POS 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 $<
endif
.ONESHELL:
#
# darwin bstc won't run, since mac os does not do 32 bit binaries any more
# openspin ought to work
@ -108,7 +110,7 @@ endif
#
all:: $(OBJECTS)
@for dir in $(SUBDIRS) ; do \
( echo "building in `pwd`/$$dir" ; cd "$$dir" ; make all ) ; \
( echo "building in `pwd`/$$dir" ; $(MAKE) --directory "$$dir" all ) ; \
done
@if [ "$(DEST)" ] ; then for file in $(OBJECTS) ; do \
mkdir -p $(DEST) ; \

Loading…
Cancel
Save