Browse Source

Merge pull request #192 from wwarthen/dev

Dev
patch
b1ackmai1er 5 years ago
committed by GitHub
parent
commit
6c98f67413
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      Doc/ChangeLog.txt
  2. 18
      Source/Apps/tstdskng.asm
  3. 7
      Source/HBIOS/Build.ps1
  4. 13
      Source/HBIOS/Build.sh
  5. 3
      Source/HBIOS/Makefile
  6. 39
      Source/HBIOS/PPI_Bus.txt
  7. 6
      Source/HBIOS/dbgmon.asm
  8. 105
      Source/HBIOS/dsky.asm
  9. 181
      Source/HBIOS/dskyng.asm
  10. 46
      Source/HBIOS/hbios.asm
  11. 12
      Source/HBIOS/imgpad.asm
  12. 4
      Source/HBIOS/imgpad2.asm
  13. BIN
      Source/HBIOS/netboot.mod
  14. 73
      Source/HBIOS/romldr.asm
  15. 48
      Source/HBIOS/std.asm
  16. 11
      Source/HBIOS/updater.asm
  17. 2
      Source/ver.inc
  18. 2
      Source/ver.lib

1
Doc/ChangeLog.txt

@ -42,6 +42,7 @@ Version 3.1.1
- PMS: Early DMA support
- W?S: Updated FLASH software to v1.3.5 (supports 128KB A29010B, 512KB A29040B)
- DDW: Support for DSKYng capabitlities
- WBW: Added Phil Summers' ROM Updater into ROM Loader
Version 3.1
-----------

18
Source/Apps/tstdskng.asm

@ -16,9 +16,9 @@
FALSE: .EQU 0
TRUE: .EQU !FALSE
;
DSKY_OSC: .EQU 1000000 ; OSCILLATOR FREQ IN HZ
DSKY_OSC: .EQU 3000000 ; OSCILLATOR FREQ IN HZ
;
BDOS: .EQU FALSE ; BDOS OR DIRECT TO 8250ISH
BDOS: .EQU TRUE ; BDOS OR DIRECT TO 8250ISH
;
UART_BASE: .EQU $68 ; UART BASE IO ADDRESS
PPI_BASE: .EQU $60 ; PPI BASE IO PORT
@ -31,7 +31,12 @@ PPI_BASE: .EQU $60 ; PPI BASE IO PORT
; 10 04
; +--08--+ 80
;
; KEY CODE MAP (KEY CODES) --CCCRRR
; KEY CODE MAP (KEY CODES) CSCCCRRR
; ||||||||
; |||||+++-- ROW
; ||+++----- COL
; |+-------- SHIFT
; +--------- CONTROL
;
; 00 08 10 18 23
; 01 09 11 19 22
@ -85,7 +90,7 @@ DSKY_PRESCL: .EQU DSKY_OSC / 100000 ; PRESCALER
LD SP,STACK
;
CALL PRTSTRD
.DB "\r\nNextGenDSKY Test Program, v1.2, 2021-06-26$"
.DB "\r\nNextGenDSKY Test Program, v1.3, 2021-07-15$"
CALL PRTSTRD
.DB "\r\nPPI port 0x$"
LD A,PPI_BASE
@ -179,7 +184,7 @@ M1:
;
M2:
CALL CST ; CONSOLE STATUS
JR NZ,M4 ; ABORT IF KEY PRESSED
JP NZ,M4 ; ABORT IF KEY PRESSED
CALL DSKY_STAT
AND $3F ; DUMP 2 HIGH BITS
JR Z,M2 ; LOOP IF STATUS ZERO
@ -198,6 +203,7 @@ M2:
M3:
PUSH BC
CALL DSKY_DIN
XOR %11000000 ; FLIP CONTROL & SHIFT MODIFIERS
CALL PRTHEXBYTE
CALL PC_SPACE
; SHIFT BUFFER
@ -223,7 +229,7 @@ M3:
LD HL,DSPBUF
CALL DSKY_PUTENCSTR
POP AF
; TOGGLE LED, KEY CODE: --CCCRRR
; TOGGLE LED, KEY CODE: CSCCCRRR
PUSH AF
AND $07 ; ISOLATE ROW
LD B,A ; SAVE IN B

7
Source/HBIOS/Build.ps1

@ -194,7 +194,7 @@ if ($Platform -ne "UNA")
"Building ${RomName} output files..."
# Build 32K OS chunk containing the loader, debug monitor, and two OS images
Concat 'romldr.bin', 'dbgmon.bin', "..\cpm22\cpm_${Bios}.bin", "..\zsdos\zsys_${Bios}.bin" osimg.bin
Concat 'romldr.bin', 'dbgmon.bin', "..\zsdos\zsys_${Bios}.bin", "..\cpm22\cpm_${Bios}.bin" osimg.bin
# Build 20K OS chunk containing the loader, debug monitor, and one OS image
Concat 'romldr.bin','dbgmon.bin', "..\zsdos\zsys_${Bios}.bin" osimg_small.bin
@ -202,8 +202,8 @@ Concat 'romldr.bin','dbgmon.bin', "..\zsdos\zsys_${Bios}.bin" osimg_small.bin
# Build second and third 32K chunks containing supplemental ROM apps (not for UNA)
if ($Platform -ne "UNA")
{
Concat '..\Forth\camel80.bin', 'nascom.bin', 'tastybasic.bin', 'game.bin', 'eastaegg.bin', 'usrrom.bin' osimg1.bin
Concat 'netboot.mod', 'imgpad2.bin' osimg2.bin
Concat '..\Forth\camel80.bin', 'nascom.bin', 'tastybasic.bin', 'game.bin', 'eastaegg.bin', 'netboot.mod', 'updater.bin', 'usrrom.bin' osimg1.bin
Concat 'imgpad2.bin' osimg2.bin
}
#
@ -258,7 +258,6 @@ else
Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg2.bin',$RomDiskFile $RomFile
Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg2.bin' $UpdFile
Concat 'hbios_app.bin','osimg_small.bin' $ComFile
# Concat 'hbios_img.bin','osimg_small.bin' $ImgFile
}
# Remove the temporary working ROM disk file

13
Source/HBIOS/Build.sh

@ -99,21 +99,21 @@ done
cp ../Forth/camel80.bin .
make dbgmon.bin romldr.bin eastaegg.bin imgpad2.bin
make dbgmon.bin romldr.bin imgpad2.bin
if [ $platform != UNA ] ; then
make nascom.bin tastybasic.bin game.bin usrrom.bin imgpad2.bin
make nascom.bin tastybasic.bin game.bin eastaegg.bin updater.bin usrrom.bin imgpad2.bin
make hbios_rom.bin hbios_app.bin hbios_img.bin
fi
echo "Building $romname output files..."
cat romldr.bin dbgmon.bin ../CPM22/cpm_$BIOS.bin ../ZSDOS/zsys_$BIOS.bin >osimg.bin
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$BIOS.bin ../CPM22/cpm_$BIOS.bin >osimg.bin
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$BIOS.bin >osimg_small.bin
if [ $platform != UNA ] ; then
cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin usrrom.bin >osimg1.bin
cat netboot.mod imgpad2.bin >osimg2.bin
cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin usrrom.bin >osimg1.bin
cat imgpad2.bin >osimg2.bin
fi
echo "Building ${romsize}KB $romname ROM disk data file..."
@ -165,7 +165,4 @@ else
cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin $romdiskfile >$romname.rom
cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin >$romname.upd
cat hbios_app.bin osimg_small.bin > $romname.com
# cat hbios_img.bin osimg_small.bin > $romname.img
fi
#rm $romdiskfile

3
Source/HBIOS/Makefile

@ -37,7 +37,7 @@ endif
MOREDIFF = camel80.bin game.bin hbios_rom.bin nascom.bin prefix.bin usrrom.bin \
dbgmon.bin hbios_app.bin imgpad2.bin osimg1.bin osimg2.bin romldr.bin \
eastaegg.bin hbios_img.bin osimg.bin tastybasic.bin \
game.bin usrrom.bin
game.bin updater.bin usrrom.bin
SUBDIRS =
DEST = ../../Binary
@ -81,6 +81,7 @@ romldr.bin: build.inc
dbgmon.bin: build.inc
nascom.bin: build.inc
eastaegg.bin: build.inc
updater.bin: build.inc
dumps:
for i in $(MOREDIFF) ; do \

39
Source/HBIOS/PPI_Bus.txt

@ -0,0 +1,39 @@
PPI Signal PPIDE PPISD DSKY DSKYNG (PROTO) DSKYNG (FINAL)
---------- ----- ----- ----- ----- -----
PA0 <>D0 >ID0 <>D0 <>D0
PA1 <>D1 >ID1 <>D1 <>D1
PA2 <>D2 >ID2 <>D2 <>D2
PA3 <>D3 >ID3 <>D3 <>D3
PA4 <>D4 >ID4 /SHUTDOWN <>D4 <>D4
PA5 <>D5 >ID5 /DECODE <>D5 <>D5
PA6 <>D6 >ID6 HEXA/CODEB <>D6 <>D6
PA7 <>D7 >ID7 DAT_COMING <>D7 <>D7
PB0 <>D8 +<ROW5
PB1 <>D9 +<ROW4
PB2 <>D10 +<ROW3
PB3 <>D11 +<ROW2
PB4 <>D12 +<ROW1
PB5 <>D13 +<ROW0
PB6 <>D14 +
PB7 <>D15 <MISO +
PC0 >DA0 >MOSI >COL0 >A0 >A0
PC1 >DA1 >CLK >COL1 >/WR
PC2 >DA2 >COL2 >/RD
PC3 >CS0* >COL3 >CS&* >CS&*
PC4 >CS1* >/CS >CS&* >CS&*
PC5 >DIOW* >/WR
PC6 >DIOR* >/WR >/RD
PC7 >RESET* >MODE >RESET >RESET
* Inverted by adapter
+ Pullup
& Both signals must be asserted
Compatibility:
- PPISD & DSKY
- PPIDE & DSKYNG
- PPISD & DSKYNG

6
Source/HBIOS/dbgmon.asm

@ -994,7 +994,7 @@ DSKY_ENTRY:
;
FRONTPANELLOOP:
LD HL,CPUUP ; SET POINTER TO CPU UP MSG
CALL DSKY_SHOWSEG ; DISPLAY UNENCODED
CALL DSKY_SHOW ; DISPLAY UNENCODED
#IF (DSKYMODE == DSKYMODE_NG)
CALL DSKY_HIGHLIGHTCMDKEYS
@ -1030,7 +1030,7 @@ FRONTPANELLOOP1:
;
DOBOOT:
LD HL,MSGBOOT ; SET POINTER TO BOOT MESSAGE
CALL DSKY_SHOWSEG ; DISPLAY UNENCODED
CALL DSKY_SHOW ; DISPLAY UNENCODED
JP BOOT ; DO BOOT
;
;__DOPORTREAD_________________________________________________________________
@ -1425,7 +1425,7 @@ ENCBUF1:
POP HL ; RESTORE POINTER
DJNZ ENCBUF1 ; LOOP THRU ALL BUF POSITIONS
LD HL,DSKY_BUF ; POINT TO DECODED BUFFER
CALL DSKY_SHOWSEG ; DISPLAY IT
CALL DSKY_SHOW ; DISPLAY IT
POP DE ; RESTORE DE
POP BC ; RESTORE BC
POP AF ; RESTORE AF

105
Source/HBIOS/dsky.asm

@ -4,31 +4,7 @@
;==================================================================================================
;
; THE DSKY MAY COSESIDE ON THE SAME PPI BUS AS A PPISD. IT MAY NOT
; SHARE A PPI BUS WITH A PPIDE.
;
PPIA .EQU DSKYPPIBASE + 0 ; PORT A
PPIB .EQU DSKYPPIBASE + 1 ; PORT B
PPIC .EQU DSKYPPIBASE + 2 ; PORT C
PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT
;
; ICM7218A KEYPAD PPISD
; -------- -------- --------
; PA0-7 IO0-7
; PB0-5 COLS 0-5
; PB6
; PB7 DO (<SD)
; PC0 ROW 0 DI (>SD)
; PC1 ROW 1 CLK (>SD)
; PC2-3 ROWS 2-3
; PC4 /CS (PRI)
; PC5 /CS (SEC)
; PC6 /WR
; PC7 MODE
;
; DSKY SCAN CODES ARE ONE BYTE: CCRRRRRR
; BITS 7-6 IDENTFY THE COLUMN OF THE KEY PRESSED
; BITS 5-0 ARE A BITMAP, WITH A BIT ON TO INDICATE ROW OF KEY PRESSED
;
; SHARE A PPI BUS WITH A PPIDE. SEE PPI_BUS.TXT FOR MORE INFORMATION.
;
; LED SEGMENTS (BIT VALUES)
;
@ -38,6 +14,10 @@ PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT
; 08 10
; +--01--+ 80
;
; DSKY SCAN CODES ARE ONE BYTE: CCRRRRRR
; BITS 7-6 IDENTFY THE COLUMN OF THE KEY PRESSED
; BITS 5-0 ARE A BITMAP, WITH A BIT ON TO INDICATE ROW OF KEY PRESSED
;
; ____PC0________PC1________PC2________PC3____
; PB5 | $20 [D] $60 [E] $A0 [F] $E0 [BO]
; PB4 | $10 [A] $50 [B] $90 [C] $D0 [GO]
@ -46,6 +26,12 @@ PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT
; PB1 | $02 [1] $42 [2] $82 [3] $C2 [EN]
; PB0 | $01 [FW] $41 [0] $81 [BK] $C1 [CL]
;
;
PPIA .EQU DSKYPPIBASE + 0 ; PORT A
PPIB .EQU DSKYPPIBASE + 1 ; PORT B
PPIC .EQU DSKYPPIBASE + 2 ; PORT C
PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT
;
;__DSKY_INIT_________________________________________________________________________________________
;
; CONFIGURE PARALLEL PORT AND CLEAR KEYPAD BUFFER
@ -240,51 +226,57 @@ DSKY_KEYBUF .DB 0
#ENDIF ; DSKY_KBD
;
;==================================================================================================
; DSKY HEX DISPLAY
; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY
;==================================================================================================
;
DSKY_HEXOUT:
LD B,DSKY_HEXBUFLEN
LD HL,DSKY_BUF
LD DE,DSKY_HEXBUF
DSKY_HEXOUT1:
; HL: ADR OF 32 BIT BINARY
; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES)
;
DSKY_BIN2SEG:
PUSH HL
PUSH DE
LD B,4 ; 4 BYTES OF INPUT
EX DE,HL
DSKY_BIN2SEG1:
LD A,(DE) ; FIRST NIBBLE
SRL A
SRL A
SRL A
SRL A
PUSH HL
LD HL,DSKY_HEXMAP
CALL DSKY_ADDHLA
LD A,(HL)
POP HL
LD (HL),A
INC HL
LD A,(DE) ; SECOND NIBBLE
AND 0FH
PUSH HL
LD HL,DSKY_HEXMAP
CALL DSKY_ADDHLA
LD A,(HL)
POP HL
LD (HL),A
INC HL
INC DE ; NEXT BYTE
DJNZ DSKY_HEXOUT1
LD HL,DSKY_BUF
JR DSKY_SHOWHEX
DJNZ DSKY_BIN2SEG1
POP DE
POP HL
RET
;
;==================================================================================================
; DSKY SHOW BUFFER
; HL: ADDRESS OF BUFFER
; ENTER @ SHOWHEX FOR HEX DECODING
; ENTER @ SHOWSEG FOR SEGMENT DECODING
;==================================================================================================
;
DSKY_SHOWHEX:
LD A,$D0 ; 7218 -> (DATA COMING, HEXA DECODE)
JR DSKY_SHOW
;
DSKY_SHOWSEG:
LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE)
JR DSKY_SHOW
;
DSKY_SHOW:
PUSH AF ; SAVE 7218 CONTROL BITS
;;PUSH AF ; SAVE 7218 CONTROL BITS
LD A,82H ; SETUP PPI
OUT (PPIX),A
CALL DSKY_COFF
POP AF
;;POP AF
LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE)
OUT (PPIA),A
CALL DSKY_STROBEC ; STROBE COMMAND
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
@ -313,11 +305,26 @@ DSKY_COFF:
; CALL DSKY_DELAY ; WAIT
RET
;
;==================================================================================================
; UTILTITY FUNCTIONS
;==================================================================================================
;
DSKY_ADDHLA:
ADD A,L
LD L,A
RET NC
INC H
RET
;
;==================================================================================================
; STORAGE
;==================================================================================================
;
; CODES FOR NUMERICS
; HIGH BIT ALWAYS SET TO SUPPRESS DECIMAL POINT
; CLEAR HIGH BIT TO SHOW DECIMAL POINT
; HIGH BIT ALWAYS CLEAR TO SUPPRESS DECIMAL POINT
; SET HIGH BIT TO SHOW DECIMAL POINT
;
DSKY_NUMS:
DSKY_HEXMAP:
.DB $7B ; 0
.DB $30 ; 1
.DB $6D ; 2

181
Source/HBIOS/dskyng.asm

@ -4,6 +4,7 @@
;==================================================================================================
;
; A DSKYNG CAN SHARE A PPI BUS WITH EITHER A PPIDE OR PPISD.
; SEE PPI_BUS.TXT FOR MORE INFORMATION.
;
; LED SEGMENTS (BIT VALUES)
;
@ -13,7 +14,12 @@
; 10 04
; +--08--+ 80
;
; KEY CODE MAP (KEY CODES) --CCCRRR
; KEY CODE MAP (KEY CODES) CSCCCRRR
; ||||||||
; |||||+++-- ROW
; ||+++----- COL
; |+-------- SHIFT
; +--------- CONTROL
;
; 00 08 10 18 23
; 01 09 11 19 22
@ -147,7 +153,9 @@ DSKY_GETKEY:
LD A,DSKY_CMD_FIFO
CALL DSKY_CMD
CALL DSKY_DIN
AND $3F ; STRIP OFF SHIFT AND CONTROL KEYS (FOR NOW)
XOR %11000000 ; FLIP POLARITY OF SHIFT/CTL BITS
PUSH AF ; SAVE VALUE
AND $3F ; STRIP SHIFT/CTL BITS FOR LOOKUP
LD B,28 ; SIZE OF DECODE TABLE
LD C,0 ; INDEX
LD HL,DSKY_KEYMAP ; POINT TO BEGINNING OF TABLE
@ -157,11 +165,15 @@ DSKY_GETKEY1:
INC HL
INC C ; BUMP INDEX
DJNZ DSKY_GETKEY1 ; LOOP UNTIL EOT
POP AF ; FIX STACK
LD A,$FF ; NOT FOUND ERR, RETURN $FF
RET
DSKY_GETKEY2:
; RETURN THE INDEX POSITION WHERE THE SCAN CODE WAS FOUND
LD A,C ; RETURN INDEX VALUE
; THE ORIGINAL SHIFT/CTRL BITS ARE RESTORED
POP AF ; RESTORE RAW VALUE
AND %11000000 ; ISOLATE SHIFT/CTRL BITS
OR C ; COMBINE WITH INDEX VALUE
RET
;
;_KEYMAP_TABLE_____________________________________________________________________________________________________________
@ -187,21 +199,25 @@ DSKY_KEYMAP:
#ENDIF ; DSKY_KBD
;
;==================================================================================================
; DSKY HEX DISPLAY
; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY
;==================================================================================================
;
DSKY_HEXOUT:
LD B,DSKY_HEXBUFLEN
LD HL,DSKY_BUF
LD DE,DSKY_HEXBUF
DSKY_HEXOUT1:
; HL: ADR OF 32 BIT BINARY
; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES)
;
DSKY_BIN2SEG:
PUSH HL
PUSH DE
LD B,4 ; 4 BYTES OF INPUT
EX DE,HL
DSKY_BIN2SEG1:
LD A,(DE) ; FIRST NIBBLE
SRL A
SRL A
SRL A
SRL A
PUSH HL
LD HL,HEXMAP
LD HL,DSKY_HEXMAP
CALL DSKY_ADDHLA
LD A,(HL)
POP HL
@ -210,49 +226,40 @@ DSKY_HEXOUT1:
LD A,(DE) ; SECOND NIBBLE
AND 0FH
PUSH HL
LD HL,HEXMAP
LD HL,DSKY_HEXMAP
CALL DSKY_ADDHLA
LD A,(HL)
POP HL
LD (HL),A
INC HL
INC DE ; NEXT BYTE
DJNZ DSKY_HEXOUT1
LD HL,DSKY_BUF
JR DSKY_SHOW
DJNZ DSKY_BIN2SEG1
POP DE
POP HL
RET
;
;==================================================================================================
; DSKY SHOW BUFFER
; HL: ADDRESS OF BUFFER
; ENTER @ SHOWHEX FOR HEX DECODING
; ENTER @ SHOWSEG FOR SEGMENT DECODING
;==================================================================================================
;
DSKY_SHOWHEX:
JR DSKY_SHOW
;
DSKY_SHOWSEG:
JR DSKY_SHOW
;
DSKY_SHOW:
; PUSH HL
; CALL DSKY_RESET
; POP HL
LD C,0 ; STARTING DISPLAY POSITION
LD B,DSKY_BUFLEN ; NUMBER OF CHARS
JP DSKY_PUTSTR
;
;==================================================================================================
; DSKYNG OUTPUT ROUTINES
;==================================================================================================
;
;
;
; COMMAND IN A
; SEND DSKY COMMAND BYTE IN REGISTER A
; TRASHES BC
;
DSKY_CMD:
LD B,$01
JR DSKY_DOUT2
;
; DATA VALUE IN A
; SEND DSKY DATA BYTE IN REGISTER A
; TRASHES BC
;
DSKY_DOUT:
@ -306,21 +313,25 @@ DSKY_DOUT2:
CALL DSKY_PPIIDLE
RET
;
; STATUS VALUE IN A
;==================================================================================================
; DSKYNG OUTPUT ROUTINES
;==================================================================================================
;
; RETURN DSKY STATUS VALUE IN A
; TRASHES BC
;
DSKY_ST:
LD B,$01
JR DSKY_DIN2
;
; DATA VALUE RETURNED IN A
; RETURN NEXT DATA VALUE IN A
; TRASHES BC
;
DSKY_DIN:
LD B,$00
;
DSKY_DIN2:
; SET PPI LINE CONFIG TO WRITE MODE
; SET PPI LINE CONFIG TO READ MODE
CALL DSKY_PPIRD
;
; SETUP
@ -363,7 +374,11 @@ DSKY_DIN2:
CALL DSKY_PPIIDLE
RET
;
; BLANK THE DISPLAY (WITHOUT USING CLEAR)
;==================================================================================================
; DSKYNG UTILITY ROUTINES
;==================================================================================================
;
; BLANK DSKYNG DISPLAY (WITHOUT USING CLEAR)
;
DSKY_BLANK:
LD A,DSKY_CMD_WDSP
@ -445,39 +460,13 @@ DSKY_GETSTR1:
DJNZ DSKY_GETSTR1
RET
;
; HL IS ADR OF ENCODED STRING OF BYTES
; B IS LEN OF STRING (BYTES)
; C IS POSITION IN DISPLAY RAM TO WRITE
;
DSKY_PUTENCSTR:
PUSH BC
LD A,C
ADD A,DSKY_CMD_WDSP
CALL DSKY_CMD
POP BC
EX DE,HL
DSKY_PUTENCSTR1:
LD A,(DE)
INC DE
LD HL,HEXMAP
CALL DSKY_ADDHLA
LD A,(HL)
XOR $FF
PUSH BC
CALL DSKY_DOUT
POP BC
DJNZ DSKY_PUTENCSTR1
RET
;
; This function is intended to update the LEDs. It expects 8 bytes following the call, and
; updates the entire matrix.
; This function is intended to update the LEDs. It expects 8 bytes
; following the call, and updates the entire matrix.
;
; EXAMPLE:
; CALL DSKY_PUTLED
; .DB $00,$00,$00,$00,$00,$00,$00,$00
;
;
DSKY_PUTLED:
EX (SP),HL
PUSH AF
@ -497,41 +486,38 @@ DSKY_PUTLED_1:
POP AF
EX (SP),HL
RET
;
; This function is intended to beep the speaker on the DSKY
;
;
DSKY_BEEP:
PUSH AF
PUSH BC
LD C,$0F
CALL DSKY_GETBYTE
or $20
OR $20
LD C,$0F
CALL DSKY_PUTBYTE
;;; timer . . .
PUSH HL
ld hl,$8FFF
LD hl,$8FFF
DSKY_BEEP1:
dec hl
ld a,H
cp 0
jp nz,DSKY_BEEP1
pop hl
DEC HL
LD A,H
CP 0
JP NZ,DSKY_BEEP1
POP HL
LD C,$0F
CALL DSKY_GETBYTE
and $DF
AND $DF
LD C,$0F
CALL DSKY_PUTBYTE
POP BC
POP AF
RET
;
; This function is intended to turn on DSKY L1
;
@ -541,14 +527,13 @@ DSKY_L1ON:
LD C,$0D
CALL DSKY_GETBYTE
or $20
OR $20
LD C,$0D
CALL DSKY_PUTBYTE
POP BC
POP AF
RET
;
; This function is intended to turn on DSKY L2
;
@ -558,14 +543,13 @@ DSKY_L2ON:
LD C,$0E
CALL DSKY_GETBYTE
and $DF
OR $20
LD C,$0E
CALL DSKY_PUTBYTE
POP BC
POP AF
RET
;
; This function is intended to turn off DSKY L1
;
@ -575,14 +559,13 @@ DSKY_L1OFF:
LD C,$0D
CALL DSKY_GETBYTE
and $DF
AND $DF
LD C,$0D
CALL DSKY_PUTBYTE
POP BC
POP AF
RET
;
; This function is intended to turn off DSKY L2
;
@ -592,16 +575,17 @@ DSKY_L2OFF:
LD C,$0E
CALL DSKY_GETBYTE
or $20
AND $DF
LD C,$0E
CALL DSKY_PUTBYTE
POP BC
POP AF
RET
;
;==================================================================================================
; DSKYNG LINE CONTROL ROUTINES
;==================================================================================================
;
; SETUP PPI FOR WRITING: PUT PPI PORT A IN OUTPUT MODE
; AVOID REWRTING PPIX IF ALREADY IN OUTPUT MODE
@ -628,15 +612,6 @@ DSKY_PPIWR1:
POP AF
RET
;
;
;
DSKY_ADDHLA:
ADD A,L
LD L,A
RET NC
INC H
RET
;
; SETUP PPI FOR READING: PUT PPI PORT A IN INPUT MODE
; AVOID REWRTING PPIX IF ALREADY IN INPUT MODE
;
@ -653,10 +628,6 @@ DSKY_PPIRD:
OUT (PPIX),A
LD (DSKY_PPIX_VAL),A
;
; ; DIAGNOSTIC
; LD A,'R'
; CALL COUT
;
DSKY_PPIRD1:
POP AF
RET
@ -666,16 +637,26 @@ DSKY_PPIRD1:
DSKY_PPIIDLE:
JR DSKY_PPIRD ; SAME AS READ MODE
;
;==================================================================================================
; UTILTITY FUNCTIONS
;==================================================================================================
;
DSKY_ADDHLA:
ADD A,L
LD L,A
RET NC
INC H
RET
;
;==================================================================================================
; STORAGE
;==================================================================================================
;
; CODES FOR NUMERICS
; HIGH BIT ALWAYS SET TO SUPPRESS DECIMAL POINT
; CLEAR HIGH BIT TO SHOW DECIMAL POINT
; HIGH BIT ALWAYS CLEAR TO SUPPRESS DECIMAL POINT
; SET HIGH BIT TO SHOW DECIMAL POINT
;
HEXMAP:
DSKY_NUMS:
DSKY_HEXMAP:
.DB $3F ; 0
.DB $06 ; 1
.DB $5B ; 2

46
Source/HBIOS/hbios.asm

@ -1431,20 +1431,18 @@ SAVE_REC_M:
CALL DSKY_INIT
LD HL,MSG_HBVER + 5
LD A,(DSKY_NUMS + RMJ)
;AND $7F
LD A,(DSKY_HEXMAP + RMJ)
OR $80
LD (HL),A
INC HL
LD A,(DSKY_NUMS + RMN)
;AND $7F
LD A,(DSKY_HEXMAP + RMN)
OR $80
LD (HL),A
INC HL
LD A,(DSKY_NUMS + RUP)
LD A,(DSKY_HEXMAP + RUP)
LD (HL),A
LD HL,MSG_HBVER
CALL DSKY_SHOWSEG
CALL DSKY_SHOW
#ENDIF
;
#IF (WBWDEBUG == USEMIO) ; BUFFER OUTPUT UNTIL
@ -2862,7 +2860,11 @@ HB_DSKFUNC .DB 0 ; CURRENT DISK FUNCTION
;
; THE CURRENT DISK UNIT NUMBER WILL BE DISPLAYED IN THE FIRST
; 2 SEG DISPLAYS. THE LOWER 24 BITS OF THE SECTOR WILL BE
; DISPLAYED IN THE LAST 6 SEG DISPLAYS
; DISPLAYED IN THE LAST 6 SEG DISPLAYS.
;
; A DOT IS DISPLAYED TO SEPARATE THE UNIT NUMBER FROM THE ADDRESS
; DISPLAY. ALSO, A TRAILING DOT IS DISPLAYED IF THE I/O FUNCTION
; IS A WRITE.
;
; HL: ADDRESS OF 32-BIT SECTOR NUMBER (LITTLE-ENDIAN)
; ALL REGISTERS PERSERVED
@ -2882,7 +2884,22 @@ HB_DSKACT1:
DJNZ HB_DSKACT1 ; LOOP
LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM
LD (DE),A ; PUT AT HEAD OF BUF
CALL DSKY_HEXOUT ; DISPLAY ON DSKY
HB_DSKACT2:
LD HL,DSKY_HEXBUF ; BINARY BUF
LD DE,DSKY_BUF ; DISPLAY BUF
CALL DSKY_BIN2SEG ; CONVERT TO SEG DISPLAY BUF
LD A,(DSKY_BUF+1) ; SECOND SEGMENT
OR %10000000 ; TURN ON DOT
LD (DSKY_BUF+1),A ; SAVE IT
LD A,(HB_DSKFUNC) ; GET CURRENT I/O FUNCTION
CP BF_DIOWRITE ; IS IT A WRITE?
JR NZ,HB_DSKACT3 ; IF NOT, NO DOT, SKIP AHEAD
LD A,(DSKY_BUF+7) ; LAST SEGMENT
OR %10000000 ; TURN ON DOT
LD (DSKY_BUF+7),A ; SAVE IT
HB_DSKACT3:
EX DE,HL ; SEG DISPLAY BUF TO HL
CALL DSKY_SHOW ; DISPLAY ON DSKY
POP HL
POP DE
POP BC
@ -2892,6 +2909,10 @@ HB_DSKACT1:
; THIS IS THE CHS VARIANT OF THE ABOVE. THIS IS USED BY CHS ORIENTED
; DISK DRIVERS (BASICALLY JUST FLOPPY).
;
; THE CURRENT DISK UNIT NUMBER WILL BE DISPLAYED IN THE FIRST
; 2 SEG DISPLAYS. THE TRACK, HEAD, AND SECTOR WILL BE DISPLAYED IN
; THE LAST 6 SEG DISPLAYS
;
; HL: ADDRESS OF CYL,HD,SEC IN THE FORMAT CCSH
; ALL REGISTERS PRESERVED
;
@ -2916,14 +2937,7 @@ HB_DSKACTCHS:
DEC HL ; BACK TO SECTOR
LD A,(HL) ; GET SECTOR
LD (DE),A ; ADD TO BUF
CALL DSKY_HEXOUT ; DISPLAY ON DSKY
POP HL
POP DE
POP BC
POP AF
RET
;
HB_HEXBUF .FILL 4,0 ; 4 BYTE HEX DISPLAY BUFFER
JR HB_DSKACT2
;
#ENDIF
;

12
Source/HBIOS/imgpad.asm

@ -1,12 +0,0 @@
#INCLUDE "std.asm"
;
SLACK .EQU ($8000-LDR_SIZ-MON_SIZ-SYS_SIZ-SYS_SIZ-EGG_SIZ)
.FILL SLACK,00H
;
MON_STACK .EQU $
;
.ECHO "Padspace space created: "
.ECHO SLACK
.ECHO " bytes.\n"
.END

4
Source/HBIOS/imgpad2.asm

@ -1,9 +1,7 @@
#INCLUDE "std.asm"
;
SLACK .EQU ($8000-NET_SIZ)
SLACK .EQU $8000
.FILL SLACK,00H
;
MON_STACK .EQU $
;
.ECHO "Padspace space created: "
.ECHO SLACK

BIN
Source/HBIOS/netboot.mod

Binary file not shown.

73
Source/HBIOS/romldr.asm

@ -208,11 +208,11 @@ prompt:
#if (DSKYENABLE)
call DSKY_RESET ; clear DSKY
ld hl,msg_sel ; boot select msg
call DSKY_SHOWSEG ; show on DSKY
call DSKY_SHOW ; show on DSKY
#IF (DSKYMODE == DSKYMODE_NG)
CALL DSKY_PUTLED
.DB $3f,$3f,$3f,$3f,$00,$00,$00,$00
call DSKY_PUTLED
.db $3f,$3f,$3f,$3f,$00,$00,$00,$00
call DSKY_BEEP
call DSKY_L2ON
#ENDIF
@ -267,6 +267,14 @@ clrbuf1:
;
concmd:
call clrled ; clear LEDs
;
#if (DSKYENABLE)
#if (DSKYMODE == DSKYMODE_NG)
call DSKY_PUTLED
.db $00,$00,$00,$00,$00,$00,$00,$00
call DSKY_L2OFF
#endif
#endif
;
; Get a command line from console and handle it
call rdln ; get a line from the user
@ -369,13 +377,12 @@ dskycmd:
cp $FF ; check for error
ret z ; abort if so
;
#IF (DSKYMODE == DSKYMODE_NG)
CALL DSKY_PUTLED
.DB $00,$00,$00,$00,$00,$00,$00,$00
#if (DSKYMODE == DSKYMODE_NG)
call DSKY_PUTLED
.db $00,$00,$00,$00,$00,$00,$00,$00
call DSKY_L2OFF
#ENDIF
#endif
;
; Attempt built-in commands
cp KY_BO ; reboot system
jp z,reboot ; if so, do it
@ -599,7 +606,7 @@ reboot:
;
#if (DSKYENABLE)
ld hl,msg_boot ; point to boot message
call DSKY_SHOWSEG ; display message
call DSKY_SHOW ; display message
#endif
;
; cold boot system
@ -631,7 +638,7 @@ romload:
;
#if (DSKYENABLE)
ld hl,msg_load ; point to load message
call DSKY_SHOWSEG ; display message
call DSKY_SHOW ; display message
#endif
;
#if (BIOS == BIOS_WBW)
@ -715,7 +722,7 @@ romload1:
;
#if (DSKYENABLE)
ld hl,msg_go ; point to go message
call DSKY_SHOWSEG ; display message
call DSKY_SHOW ; display message
#endif
;
ld l,(ix+ra_ent) ; HL := app entry address
@ -740,7 +747,7 @@ diskboot:
;
#if (DSKYENABLE)
ld hl,msg_load ; point to load message
call DSKY_SHOWSEG ; display message
call DSKY_SHOW ; display message
#endif
;
#if (BIOS == BIOS_WBW)
@ -1024,7 +1031,7 @@ diskboot10:
;
#if (DSKYENABLE)
ld hl,msg_go ; point to go message
call DSKY_SHOWSEG ; display message
call DSKY_SHOW ; display message
#endif
;
; Jump to entry vector
@ -2075,34 +2082,35 @@ ra_ent .equ 12
;
ra_tbl:
;
; Name Key Dsky Bank Src Dest Size Entry
; --------- ------- ----- -------- ----- ------- ------- ----------
ra_ent(str_mon, 'M', KY_CL, BID_IMG0, $1000, MON_LOC, MON_SIZ, MON_SERIAL)
; Name Key Dsky Bank Src Dest Size Entry
; --------- ------- ----- -------- ----- ------- ------- ----------
ra_ent(str_mon, 'M', KY_CL, BID_IMG0, MON_IMGLOC, MON_LOC, MON_SIZ, MON_SERIAL)
ra_entsiz .equ $ - ra_tbl
ra_ent(str_cpm22, 'C', KY_BK, BID_IMG0, $2000, CPM_LOC, CPM_SIZ, CPM_ENT)
ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, $5000, CPM_LOC, CPM_SIZ, CPM_ENT)
ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT)
ra_ent(str_cpm22, 'C', KY_BK, BID_IMG0, CPM_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT)
#if (BIOS == BIOS_WBW)
ra_ent(str_fth, 'F', KY_EX, BID_IMG1, $0000, FTH_LOC, FTH_SIZ, FTH_LOC)
ra_ent(str_bas, 'B', KY_DE, BID_IMG1, $1700, BAS_LOC, BAS_SIZ, BAS_LOC)
ra_ent(str_tbas, 'T', KY_EN, BID_IMG1, $3700, TBC_LOC, TBC_SIZ, TBC_LOC)
ra_ent(str_play, 'P', $FF, BID_IMG1, $4000, GAM_LOC, GAM_SIZ, GAM_LOC)
ra_ent(str_egg, 'E'+$80, $FF, BID_IMG1, $4900, EGG_LOC, EGG_SIZ, EGG_LOC)
ra_ent(str_user, 'U', $FF, BID_IMG1, $4B00, USR_LOC, USR_SIZ, USR_LOC)
ra_ent(str_net, 'N', $FF, BID_IMG2, $0000, NET_LOC, NET_SIZ, NET_LOC)
ra_ent(str_fth, 'F', KY_EX, BID_IMG1, FTH_IMGLOC, FTH_LOC, FTH_SIZ, FTH_LOC)
ra_ent(str_bas, 'B', KY_DE, BID_IMG1, BAS_IMGLOC, BAS_LOC, BAS_SIZ, BAS_LOC)
ra_ent(str_tbas, 'T', KY_EN, BID_IMG1, TBC_IMGLOC, TBC_LOC, TBC_SIZ, TBC_LOC)
ra_ent(str_play, 'P', $FF, BID_IMG1, GAM_IMGLOC, GAM_LOC, GAM_SIZ, GAM_LOC)
ra_ent(str_egg, 'E'+$80, $FF, BID_IMG1, EGG_IMGLOC, EGG_LOC, EGG_SIZ, EGG_LOC)
ra_ent(str_net, 'N', $FF, BID_IMG1, NET_IMGLOC, NET_LOC, NET_SIZ, NET_LOC)
ra_ent(str_upd, 'O', $FF, BID_IMG1, UPD_IMGLOC, UPD_LOC, UPD_SIZ, UPD_LOC)
ra_ent(str_user, 'U', $FF, BID_IMG1, USR_IMGLOC, USR_LOC, USR_SIZ, USR_LOC)
#endif
#if (DSKYENABLE)
ra_ent(str_dsky, 'Y'+$80, KY_GO, BID_IMG0, $1000, MON_LOC, MON_SIZ, MON_DSKY)
ra_ent(str_dsky, 'Y'+$80, KY_GO, BID_IMG0, MON_IMGLOC, MON_LOC, MON_SIZ, MON_DSKY)
#endif
.dw 0 ; table terminator
;
ra_tbl_app:
;
; Name Key Dsky Bank Src Dest Size Entry
; --------- ------- ----- -------- ----- ------- ------- ----------
ra_ent(str_mon, 'M', KY_CL, bid_cur, $1000, MON_LOC, MON_SIZ, MON_SERIAL)
ra_ent(str_zsys, 'Z', KY_FW, bid_cur, $2000, CPM_LOC, CPM_SIZ, CPM_ENT)
; Name Key Dsky Bank Src Dest Size Entry
; --------- ------- ----- -------- ----- ------- ------- ----------
ra_ent(str_mon, 'M', KY_CL, bid_cur, MON_IMGLOC, MON_LOC, MON_SIZ, MON_SERIAL)
ra_ent(str_zsys, 'Z', KY_FW, bid_cur, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT)
#if (DSKYENABLE)
ra_ent(str_dsky, 'Y'+$80, KY_GO, bid_cur, $1000, MON_LOC, MON_SIZ, MON_DSKY)
ra_ent(str_dsky, 'Y'+$80, KY_GO, bid_cur, MON_IMGLOC, MON_LOC, MON_SIZ, MON_DSKY)
#endif
.dw 0 ; table terminator
;
@ -2114,6 +2122,7 @@ str_fth .db "Forth",0
str_bas .db "BASIC",0
str_tbas .db "Tasty BASIC",0
str_play .db "Play a Game",0
str_upd .db "ROM Updater",0
str_user .db "User App",0
str_egg .db "",0
str_net .db "Network Boot",0

48
Source/HBIOS/std.asm

@ -538,39 +538,65 @@ CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS
CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS)
CPM_IMGSIZ .EQU $3000
; ROM BANK 1
LDR_LOC .EQU $0000
LDR_SIZ .EQU $1000
LDR_END .EQU LDR_LOC +LDR_SIZ
LDR_IMGLOC .EQU $0000
MON_LOC .EQU $EE00 ; LOCATION OF MONITOR FOR RUNNING SYSTEM
MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE
MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR
MON_IMGLOC .EQU LDR_IMGLOC + LDR_SIZ
ZSYS_IMGLOC .EQU MON_IMGLOC + MON_SIZ
CPM_IMGLOC .EQU ZSYS_IMGLOC + CPM_IMGSIZ
; ROM BANK 2
FTH_LOC .EQU $0200 ; CAMEL FORTH
FTH_SIZ .EQU $1700
FTH_END .EQU FTH_LOC + FTH_SIZ
FTH_IMGLOC .EQU $0000
BAS_LOC .EQU $0200 ; NASCOM BASIC
BAS_SIZ .EQU $2000
BAS_END .EQU BAS_LOC + BAS_SIZ
BAS_IMGLOC .EQU FTH_IMGLOC + FTH_SIZ
TBC_LOC .EQU $0A00 ; TASTYBASIC
TBC_SIZ .EQU $0900
TBC_END .EQU TBC_LOC + TBC_SIZ
TBC_IMGLOC .EQU BAS_IMGLOC + BAS_SIZ
GAM_LOC .EQU $0200 ; GAME 2048
GAM_SIZ .EQU $0900
GAM_END .EQU GAM_LOC + GAM_SIZ
GAM_IMGLOC .EQU TBC_IMGLOC + TBC_SIZ
EGG_LOC .EQU $F000 ; EASTER EGG
EGG_SIZ .EQU $0200
EGG_END .EQU EGG_LOC + EGG_SIZ
EGG_IMGLOC .EQU GAM_IMGLOC + GAM_SIZ
FTH_LOC .EQU $0200 ; CAMEL FORTH
FTH_SIZ .EQU $1700
FTH_END .EQU FTH_LOC + FTH_SIZ
NET_LOC .EQU $0100 ; NETWORK BOOT
NET_SIZ .EQU $1000
NET_END .EQU NET_LOC + NET_SIZ
NET_IMGLOC .EQU EGG_IMGLOC + EGG_SIZ
GAM_LOC .EQU $0200 ; GAME 2048
GAM_SIZ .EQU $0900
GAM_END .EQU GAM_LOC + GAM_SIZ
UPD_LOC .EQU $0200 ; ROM UPDATER
UPD_SIZ .EQU $0D00
UPD_END .EQU UPD_LOC + UPD_SIZ
UPD_IMGLOC .EQU NET_IMGLOC + NET_SIZ
USR_LOC .EQU $0200 ; USER
USR_SIZ .EQU $8000 - FTH_SIZ - BAS_SIZ - TBC_SIZ - GAM_SIZ - EGG_SIZ
USR_SIZ .EQU BNKTOP - UPD_IMGLOC - UPD_SIZ
USR_END .EQU USR_LOC + USR_SIZ
NET_LOC .EQU $0100 ; NETWORK BOOT
NET_SIZ .EQU $2000
NET_END .EQU NET_LOC + NET_SIZ
USR_IMGLOC .EQU UPD_IMGLOC + UPD_SIZ
MON_DSKY .EQU MON_LOC + (0 * 3) ; MONITOR ENTRY (DSKY)
MON_SERIAL .EQU MON_LOC + (1 * 3) ; MONITOR ENTRY (SERIAL PORT)

11
Source/HBIOS/updater.asm

@ -4,10 +4,7 @@
; PROVIDES THE CAPABILTY TO UPDATE ROMWBW FROM THE SBC BOOT LOADER USING
; AN XMODEM FILE TRANSFER.
;
; TO INSTALL, SAVE THIS FILE AS USRROM.ASM IN \RomWBW\Source\HBIOS
; AND REBUILD AND INSTALL THE NEW ROM VERSION.
;
; THE UPDATER CAN THEN BE ACCESSED USING THE "U" OPTION IN THE SBC BOOT LOADER.
; THIS TOOL CAN BE LAUNCHED FROM THE ROMWBW BOOT LOADER USING OPTION 'R'.
;
; OPTION (C) AND (S) - CONSOLE AND SERIAL DEVICE
;
@ -129,7 +126,7 @@ HBX_BNKSEL .EQU $FE2B
;
XFUDBG .EQU 0
;
.ORG USR_LOC
.ORG UPD_LOC
;
; ASCII codes
;
@ -1215,9 +1212,9 @@ LSTDEV: .EQU $
;
sector4k: .EQU $ ; 32 PACKETS GET ACCUMULATED HERE BEFORE FLASHING
;
SLACK .EQU (USR_END - $)
SLACK .EQU (UPD_END - $)
.FILL SLACK,$FF
.ECHO "User ROM space remaining: "
.ECHO "ROM Updater space remaining: "
.ECHO SLACK
.ECHO " bytes.\n"
.END

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.88"
#DEFINE BIOSVER "3.1.1-pre.90"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.88"
db "3.1.1-pre.90"
endm

Loading…
Cancel
Save