Browse Source

Merge pull request #37 from wwarthen/master

Resync
pull/60/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
b0226fe1e8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      Doc/Nascom.txt
  2. 3
      Source/CPM3/Build.cmd
  3. 25
      Source/HBIOS/sd.asm
  4. 144
      Source/HBIOS/vdu.asm
  5. 2
      Source/ZPM3/Build.cmd

23
Doc/Nascom.txt

@ -92,6 +92,29 @@ OR LOGICAL OR
< LESS THAN
^ POWER
EXPRESSION PRECEDENCE:
() EXPRESSIONS IN ()
^ POWER
- NEGATION
* / MULTIPLICATION AND DIVISION
+ - ADDITION AND SUBTRACTION
= EQUALS
<> NOT EQUAL
< LESS THAN
> GREATER THAN
<= =< LESS THAN OR EQUAL TO
>= => GREATER THAN OR EQUAL TO
NOT LOGICAL, BITWISE NEGATION
AND LOGICAL, BITWISE AND
OR LOGICAL, BITWISE OR
VARIABLES:
NO LENGTH LIMIT BUT ONLY FIRST TWO CHARACTERS ARE SIGNIFICANT.
CANNOT HAVE THE SAME NAME AS RESERVED WORDS.
MAY BE AN ARRAY.
ERROR CODE:
NF NEXT without FOR

3
Source/CPM3/Build.cmd

@ -67,6 +67,8 @@ rem *** Banked ***
copy cpm3bnk.sys cpm3.sys
copy genbnk.dat gencpm.dat
if not exist ../../Binary/hd_cpm3.img goto :eof
rem Update cpm_hd.img
echo.
echo.
@ -90,6 +92,7 @@ for %%f in (
readme.1st
cpm3fix.pat
) do call :upd_img %%f
goto :eof
:upd_img

25
Source/HBIOS/sd.asm

@ -212,9 +212,9 @@ SD_OPRDEF .EQU %00100000 ; QUIESCENT STATE
SD_CD0 .EQU %00000001 ; IN/OUT:SD_OPREG:0 = CD0, PMOD pull CD0 low
SD_CD1 .EQU %00000010 ; IN:SD_OPREG:1 = CD1, IN=0 Card detect switch
SD_CD2 .EQU %00000100 ; IN:SD_OPREG:2 = CD2, IN=0 Card detect switch
SD_CS0 .EQU %00010000 ; IN/OUT:SD_OPREG:3 = CS0, PMOD SPI CS
SD_CS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present
SD_CS2 .EQU %00010000 ; IN/OUT:SD_OPREG:5 = CS2, SDCARD2 CS, IN=1 Card present
ENETCS0 .EQU %00001000 ; IN/OUT:SD_OPREG:3 = CS0, PMOD SPI CS
SDCS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present
PARK .EQU %00100000 ; IN/OUT:SD_OPREG:5 = CS2, SDCARD2 CS, IN=1 Card present
SD_WRTR .EQU %01011100 ; Write data and transfer
SD_RDTR .EQU %01011101 ; Read data and transfer
SD_RDNTR .EQU %01011100 ; Read data and NO transfer
@ -1337,15 +1337,11 @@ SD_EXECCMD1:
#IF (SDMODE == SDMODE_MT)
; 256 loops might not be long enough timeout
; when only IN is required to read data
; LD DE,$7FFF ; INIT TIMEOUT LOOP COUNTER
LD E,0 ; INIT TIMEOUT LOOP COUNTER
SD_EXECCMD2:
IN A,(SD_RDTR) ; GET A BYTE FROM THE CARD
OR A ; SET FLAGS
JP P,SD_EXECCMD3 ; IF HIGH BIT IS 0, WE HAVE RESULT
; DEC DE
; BIT 7,D
; JR Z,SD_EXECCMD2 ; KEEP TRYING UNTIL TIMEOUT
DEC E ; OTHERWISE DECREMENT LOOP COUNTER
JR NZ,SD_EXECCMD2 ; AND LOOP UNTIL TIMEOUT
#ELSE
@ -1670,18 +1666,7 @@ SD_SELECT2:
#ENDIF
#ELSE
#IF (SDMODE == SDMODE_MT)
IN A,(SD_OPRREG)
BIT 0,(IY+SD_DEV) ; DEVICE 0 OR 1
JR NZ,SD_SELECT1
AND SD_CS1 ; DEVICE 0
JR SD_SELECT2
SD_SELECT1:
AND SD_CS2 ; DEVICE 1
SD_SELECT2:
JR NZ,SD_SELECT3 ; NZ if CS input high
POP DE ; return address of call to SD_SELECT
POP DE ; return address of call to SD_WAITRDY
JR SD_NOMEDIA
LD A,SDCS1
SD_SELECT3:
LD D,A
LD A,(SD_OPRVAL)
@ -1707,7 +1692,7 @@ SD_DESELECT:
#ENDIF
#ELSE
#IF (SDMODE == SDMODE_MT)
AND ~(SD_CS1 + SD_CS2) ; RESET SD_CS1 and SD_CS2 (CHIP SELECT)
LD A,PARK ; WHY IS PARK (CS2) BEING ASSERTED HERE???
#ELSE
AND ~SD_CS ; RESET SD_CS (CHIP SELECT)
#ENDIF

144
Source/HBIOS/vdu.asm

@ -5,7 +5,7 @@
; REVISED/ENHANCED BY DAN WERNER -- 11/7/2009
; ROMWBW ADAPTATION BY: WAYNE WARTHEN -- 11/9/2012
; 80X25, 80X30 AND MODE INFO AT BOOT ADDED BY: PHIL SUMMERS -- 2/3/2019
; ADD CURSOR STYLE OPTIONS: PHIL SUMMERS -- 19/10/2019
; ADD CURSOR STYLE OPTIONS, IMPLEMENT VDU_VDASCS FUNCTION : PHIL SUMMERS -- 19/10/2019
;======================================================================
;
; VDU-DW.ZIP IS THE DEFAULY 10X8 FONT THAT SUITS 80X25 AND 80X26 MODE.
@ -15,7 +15,6 @@
;
; TODO:
; - ADD REMAINING REGISTERS TO INIT
; - IMPLEMENT SET CURSOR STYLE (VDASCS) FUNCTION
; - IMPLEMENT ALTERNATE DISPLAY MODES?
;
;======================================================================
@ -34,7 +33,6 @@ VDU_PPIB .EQU VDU_BASE + $05 ; PPI PORT B
VDU_PPIC .EQU VDU_BASE + $06 ; PPI PORT C
VDU_PPIX .EQU VDU_BASE + $07 ; PPI CONTROL PORT
;
;
VDU_NOBL .EQU 00000000B ; NO BLINK
VDU_NOCU .EQU 00100000B ; NO CURSOR
VDU_BFAS .EQU 01000000B ; BLINK AT X16 RATE
@ -47,7 +45,7 @@ VDU_CSTY .EQU VDU_BLOK ; DEFAULT CURSOR STYLE
VDU_BLNK .EQU VDU_NOBL ; DEFAULT BLINK RATE
;
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;
#IF (VDUSIZ=V80X24)
DLINES .EQU 24
DROWS .EQU 80
@ -84,7 +82,6 @@ VDU_R10 .EQU (VDU_BLNK + DSCANL-1)
VDU_R11 .EQU DSCANL-1
#ENDIF
;
;
;======================================================================
; VDU DRIVER - INITIALIZATION
;======================================================================
@ -187,10 +184,24 @@ VDU_VDADEV:
RET
VDU_VDASCS:
; CURSOR START := TOP NIBBLE OF D
; CURSOR FINISH := BOTTOM NIBBLE OF D
LD A,D ; GET CURSOR FINISH.
AND 00001111B ; BOTTOM NIBBLE OF D
LD L,A ; SAVE IN L FOR R11
LD A,D ; GET CURSOR START.
AND 11110000B ; TOP NIBBLE IF D
RRCA
RRCA
RRCA ; COMBINE CURSOR START
RRCA ; AND CURSOR STYLE AND
OR VDU_CSTY ; SAVE IN H FOR R10
LD H,A
LD C,10
CALL VDU_WRREGX ; UPDATE CURSOR
CALL PANIC ; NOT IMPLEMENTED (YET)
XOR A
RET
VDU_VDASCP:
CALL VDU_XY
@ -261,7 +272,7 @@ VDU_WAITRDY:
;----------------------------------------------------------------------
; UPDATE SY6845 REGISTERS
; VDU_WRREG WRITES VALUE IN A TO VDU REGISTER SPECIFIED IN C
; VDU_WRREGX WRITES VALUE IN DE TO VDU REGISTER PAIR IN C, C+1
; VDU_WRREGX WRITES VALUE IN HL TO VDU REGISTER PAIR IN C, C+1
;----------------------------------------------------------------------
;
VDU_WRREG:
@ -336,14 +347,7 @@ VDU_CRTINIT1:
INC HL ; POINT TO NEXT VALUE
INC C ; POINT TO NEXT REGISTER
DJNZ VDU_CRTINIT1 ; LOOP
LD HL,VDU_INIT6845+10 ; SAVE
LD A,(HL) ; DEFAULT
LD (VDU_CS),A ; CURSOR
INC HL ; SCANLINE
LD A,(HL) ; START AND
LD (VDU_CE),A ; FINISH
RET ; POSITION
RET
;
;----------------------------------------------------------------------
; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL
@ -563,12 +567,33 @@ VDU_POS .DW 0 ; CURRENT DISPLAY POSITION
VDU_OFFSET .DW 0 ; CURRENT DISPLAY POSITION
VDU_BUF .FILL 256,0 ; COPY BUFFER
;
;==================================================================================================
; ECB-VDU VIDEO MODE DESCRIPTION
;==================================================================================================\
;
; 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
; 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.
; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG)
;
;
; .DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING
; ; B6=1 PIN 34 IS UPDATE STROBE
; ; B5=1 DELAY CURSOR 1 CHARACTER
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER
; ; B3=1 TRANSPARENT MEMORY ADDRESSING
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING
; ; B1,B0=0 NON-INTERLACE
VDU_INIT6845:
#IF (VDUSIZ=V80X24)
;==================================================================================================
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x24 10x8
;==================================================================================================
;
VDU_INIT6845:
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC)
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED (80 COLUMNS)
.DB 060H ; R2 HORIZONTAL SYNC POSITION
@ -577,27 +602,20 @@ VDU_INIT6845:
.DB 002H ; R5 VERTICAL TOTAL ADJUST (
.DB DLINES ; R6 VERTICAL DISPLAYED (24 ROWS)
.DB 01AH ; R7 VERTICAL SYNC
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING
; B6=1 PIN 34 IS UPDATE STROBE
; B5=1 DELAY CURSOR 1 CHARACTER
; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER
; B3=1 TRANSPARENT MEMORY ADDRESSING
; B2=0 RAM STRAIGHT BINARY ADDRESSING
; B1,B0=0 NON-INTERLACE
.DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER
VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER
.DB VDU_R10 ; R10 CURSOR START RASTER
.DB VDU_R11 ; R11 CURSOR END RASTER
.DB 00H ; R12 START ADDRESS HI
.DB 00H ; R13 START ADDRESS LO
.DB 00H ; R14 CURSOR ADDRESS HI
.DB 00H ; R15 CURSOR ADDRESS LO
;
#ENDIF
#IF (VDUSIZ=V80X25)
;==================================================================================================
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x25 10x8
;==================================================================================================
VDU_INIT6845:
;
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC)
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80
.DB 060H ; R2 HORIZONTAL SYNC POSITION
@ -606,27 +624,20 @@ VDU_INIT6845:
.DB 002H ; R5 VERTICAL TOTAL ADJUST (
.DB DLINES ; R6 VERTICAL DISPLAYED (25 ROWS)
.DB 01BH ; R7 VERTICAL SYNC
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING
; ; B6=1 PIN 34 IS UPDATE STROBE
; ; B5=1 DELAY CURSOR 1 CHARACTER
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER
; ; B3=1 TRANSPARENT MEMORY ADDRESSING
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING
; ; B1,B0=0 NON-INTERLACE
.DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER
VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER
.DB VDU_R10 ; R10 CURSOR START RASTER
.DB VDU_R11 ; R11 CURSOR END RASTER
.DB 00H ; R12 START ADDRESS HI
.DB 00H ; R13 START ADDRESS LO
.DB 00H ; R14 CURSOR ADDRESS HI
.DB 00H ; R15 CURSOR ADDRESS LO
;
#ENDIF
#IF (VDUSIZ=V80X30)
;==================================================================================================
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x30 8x8
;==================================================================================================
VDU_INIT6845:
;
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC)
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80
.DB 060H ; R2 HORIZONTAL SYNC POSITION
@ -635,27 +646,20 @@ VDU_INIT6845:
.DB 00H ; R5 VERTICAL TOTAL ADJUST (
.DB DLINES ; R6 VERTICAL DISPLAYED (30 ROWS)
.DB 22H ; R7 VERTICAL SYNC
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING
; ; B6=1 PIN 34 IS UPDATE STROBE
; ; B5=1 DELAY CURSOR 1 CHARACTER
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER
; ; B3=1 TRANSPARENT MEMORY ADDRESSING
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING
; ; B1,B0=0 NON-INTERLACE
.DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER
VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER
.DB VDU_R10 ; R10 CURSOR START RASTER
.DB VDU_R11 ; R11 CURSOR END RASTER
.DB 00H ; R12 START ADDRESS HI
.DB 00H ; R13 START ADDRESS LO
.DB 00H ; R14 CURSOR ADDRESS HI
.DB 00H ; R15 CURSOR ADDRESS LO
;
#ENDIF
#IF (VDUSIZ=V80X25B)
;==================================================================================================
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x25 12x8 TO SUIT BLOCK GRAPHICS
;==================================================================================================
VDU_INIT6845:
;
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC)
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80
.DB 060H ; R2 HORIZONTAL SYNC POSITION
@ -664,27 +668,20 @@ VDU_INIT6845:
.DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL)
.DB DLINES ; R6 VERTICAL DISPLAY
.DB 019H ; R7 VERTICAL SYNC (DLINES .. R4)
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING
; ; B6=1 PIN 34 IS UPDATE STROBE
; ; B5=1 DELAY CURSOR 1 CHARACTER
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER
; ; B3=1 TRANSPARENT MEMORY ADDRESSING
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING
; ; B1,B0=0 NON-INTERLACE
.DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER
VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER
.DB VDU_R10 ; R10 CURSOR START RASTER
.DB VDU_R11 ; R11 CURSOR END RASTER
.DB 00H ; R12 START ADDRESS HI
.DB 00H ; R13 START ADDRESS LO
.DB 00H ; R14 CURSOR ADDRESS HI
.DB 00H ; R15 CURSOR ADDRESS LO
;
#ENDIF
#IF (VDUSIZ=V80X24B)
;==================================================================================================
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x24 12x8 TO SUIT BLOCK GRAPHICS
;==================================================================================================
VDU_INIT6845:
;
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC)
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80
.DB 060H ; R2 HORIZONTAL SYNC POSITION
@ -693,33 +690,18 @@ VDU_INIT6845:
.DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL)
.DB DLINES ; R6 VERTICAL DISPLAY
.DB 018H ; R7 VERTICAL SYNC (DLINES .. R4)
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING
; ; B6=1 PIN 34 IS UPDATE STROBE
; ; B5=1 DELAY CURSOR 1 CHARACTER
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER
; ; B3=1 TRANSPARENT MEMORY ADDRESSING
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING
; ; B1,B0=0 NON-INTERLACE
.DB 078H ; R8 MODE
.DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1)
VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER
VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER
.DB VDU_R10 ; R10 CURSOR START RASTER
.DB VDU_R11 ; R11 CURSOR END RASTER
.DB 00H ; R12 START ADDRESS HI
.DB 00H ; R13 START ADDRESS LO
.DB 00H ; R14 CURSOR ADDRESS HI
.DB 00H ; R15 CURSOR ADDRESS LO
;
#ENDIF
; 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
; 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.
; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG)
;
;
;==================================================================================================
;;==================================================================================================
; VDU DRIVER - INSTANCE DATA
;==================================================================================================
;

2
Source/ZPM3/Build.cmd

@ -37,6 +37,8 @@ if exist zpm3.sys del zpm3.sys
ren cpm3.sys zpm3.sys
rem pause
if not exist ../../Binary/hd_cpm3.img goto :eof
rem Update cpm_hd.img
echo.
echo.

Loading…
Cancel
Save