From b67106889e4a11e488cc32842186e0b08726d5d9 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sun, 10 Jan 2016 16:01:33 -0800 Subject: [PATCH] Add HBIOS Heap Memory - New heap memory functions - Restructured new disk I/O functions --- Doc/Source/Build.docx | Bin 0 -> 22239 bytes Source/CBIOS/cbios.asm | 46 +++++++++----- Source/HBIOS/Build.ps1 | 3 +- Source/HBIOS/fd.asm | 40 ++++++------ Source/HBIOS/hbios.asm | 133 +++++++++++++++++++++++++++++++++++----- Source/HBIOS/hbios.inc | 27 +++++--- Source/HBIOS/hdsk.asm | 52 ++++++++-------- Source/HBIOS/ide.asm | 62 ++++++++++--------- Source/HBIOS/loader.asm | 9 ++- Source/HBIOS/md.asm | 54 ++++++++-------- Source/HBIOS/ppide.asm | 80 ++++++++++++------------ Source/HBIOS/ppp.asm | 38 +++++++----- Source/HBIOS/prp.asm | 41 +++++++------ Source/HBIOS/rf.asm | 38 +++++++----- Source/HBIOS/sd.asm | 121 ++++++++++++++++++------------------ 15 files changed, 457 insertions(+), 287 deletions(-) create mode 100644 Doc/Source/Build.docx diff --git a/Doc/Source/Build.docx b/Doc/Source/Build.docx new file mode 100644 index 0000000000000000000000000000000000000000..31c11c3932cc67e6b78fff2c082abb9865a5d3fa GIT binary patch literal 22239 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 DhX=i= literal 0 HcmV?d00001 diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index dacf7537..b521fbbf 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -337,18 +337,31 @@ WBOOT: ; ;__________________________________________________________________________________________________ GOCPM: + #IFDEF PLTUNA ; USE A DEDICATED BUFFER FOR UNA PHYSICAL DISK I/O LD HL,SECBUF ; ADDRESS OF PHYSICAL SECTOR BUFFER - LD (BUFADR),HL ; SAVE IT IN BUFADR FOR LATER + LD (DSKBUF),HL ; SAVE IT IN DSKBUF FOR LATER #ELSE - ; CALL BF_DIOSETBUF WITH A PARM OF ZERO TO CAUSE IT TO RESET - ; THE PHYSICAL DISK BUFFER TO THE DEFAULT LOCATION PRE-ALLOCATED - ; INSIDE OF THE HBIOS BANK. THE ADDRESS IS RETURNED IN HL AND SAVED. - LD B,BF_DIOSETBUF ; GET DISK BUFFER ADR IN HBIOS DRIVER BANK - LD HL,0 - RST 08 ; MAKE HBIOS CALL - LD (BUFADR),HL ; RECORD THE BUFFER ADDRESS + ;; CALL BF_DIOSETBUF WITH A PARM OF ZERO TO CAUSE IT TO RESET + ;; THE PHYSICAL DISK BUFFER TO THE DEFAULT LOCATION PRE-ALLOCATED + ;; INSIDE OF THE HBIOS BANK. THE ADDRESS IS RETURNED IN HL AND SAVED. + ;LD B,BF_DIOSETBUF ; GET DISK BUFFER ADR IN HBIOS DRIVER BANK + ;LD HL,0 + ;RST 08 ; MAKE HBIOS CALL + ;LD (DSKBUF),HL ; RECORD THE BUFFER ADDRESS + + ; ALLOCATE A SINGLE SECTOR DISK BUFFER ON THE HBIOS HEAP + LD B,BF_SYSALLOC ; BIOS FUNC: ALLOCATE HEAP MEMORY + LD HL,512 ; 1 SECTOR, 512 BYTES + RST 08 ; DO IT + CALL NZ,PANIC ; HANDLE ERROR + LD (DSKBUF),HL ; RECORD THE BUFFER ADDRESS + + ; TEMPORARY!!! LET HBIOS KNOW THE DISK BUFFER + LD B,BF_DIOSETBUF + RST 08 + #ENDIF ; LD A,$C3 ; LOAD A WITH 'JP' INSTRUCTION (USED BELOW) @@ -1107,7 +1120,7 @@ BLK_SETUP: RRCA LD E,A ; INTO LOW ORDER BYTE OF DESTINATION LD D,0 ; HIGH ORDER BYTE IS ZERO - LD HL,(BUFADR) ; HL = START OF SEC BUF + LD HL,(DSKBUF) ; HL = START OF SEC BUF ADD HL,DE ; ADD IN COMPUTED OFFSET ADD HL,DE ; HL NOW = INDEX * 128 (SOURCE) LD DE,(DMAADR) ; DE = DESTINATION = DMA BUF @@ -1291,7 +1304,7 @@ DSK_IO2: LD E,C ; UNIT TO E LD C,B ; FUNC TO C LD B,E ; UNIT TO B - LD DE,(BUFADR) ; SET BUFFER ADDRESS + LD DE,(DSKBUF) ; SET BUFFER ADDRESS LD HL,1 ; 1 SECTOR ; DISPATCH TO UBIOS RST 08 @@ -1449,7 +1462,7 @@ STR_SEC .DB " SEC=$" ; SECADR .DW 0 ; ADDRESS OF SECTOR IN ROM/RAM PAGE DEFDRIVE .DB 0 ; DEFAULT DRIVE -CCPBUF .DW $7000 ; ADDRESS OF CCP BUF IN BIOS BANK +CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK ; #IFDEF PLTWBW BNKBIOS .DB 0 ; BIOS BANK ID @@ -1462,7 +1475,7 @@ DSKOP .DB 0 ; DISK OPERATION (DOP_READ/DOP_WRITE) WRTYPE .DB 0 ; WRITE TYPE (0=NORMAL, 1=DIR (FORCE), 2=FIRST RECORD OF BLOCK) DMAADR .DW 0 ; DIRECT MEMORY ADDRESS HSTWRT .DB 0 ; TRUE = BUFFER IS DIRTY -BUFADR .DW $8000-$0400 ; ADDRESS OF PHYSICAL SECTOR BUFFER (DEFAULT MATCHES HBIOS) +DSKBUF .DW 0 ; ADDRESS OF PHYSICAL SECTOR BUFFER ; ; LOGICAL DISK I/O REQUEST PENDING ; @@ -1854,6 +1867,11 @@ INIT: RST 08 ; DO IT #ELSE ; SAVE COMMAND PROCESSOR TO DEDICATED CACHE IN RAM BANK 1 + LD B,BF_SYSALLOC ; HBIOS FUNC: ALLOCATE HEAP MEMORY + LD HL,CCP_SIZ ; SIZE TO ALLOC (SIZE OF CCP) + RST 08 ; DO IT + CALL NZ,PANIC ; BIG PROBLEM + LD (CCPBUF),HL ; SAVE THE ADDRESS (IN BIOS MEM) LD B,BF_SYSXCPY ; HBIOS FUNC: SYSTEM EXTENDED COPY LD A,(BNKUSER) ; GET USER BANK LD E,A ; E = SOURCE (USER BANK) @@ -1862,7 +1880,7 @@ INIT: RST 08 ; DO IT LD B,BF_SYSCPY ; HBIOS FUNC: SYSTEM COPY LD HL,CCP_LOC ; COPY FROM CCP LOCATION IN USR BANK - LD DE,(CCPBUF) ; TO FIXED LOCATION IN HB BANK + LD DE,(CCPBUF) ; TO ALLOCATED LOCATION IN HB BANK LD IX,CCP_SIZ ; COPY CONTENTS OF COMMAND PROCESSOR RST 08 ; DO IT #ENDIF @@ -2591,7 +2609,7 @@ ALLOC: ; ADDRESS IN HL. LEAVE ALL OTHER REGS ALONE EXCEPT A ; Z FOR SUCCESS, NZ FOR FAILURE ; - PUSH BC ; SAVE ORIGINAL HL + PUSH BC ; SAVE ORIGINAL BC LD BC,(HEAPTOP) ; BC := CURRENT HEAP TOP PUSH BC ; SAVE AS START OF REQUESTED BUFFER ADD HL,BC ; HL := NEW HEAP TOP diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index 0958a2e3..b0c627b1 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -54,7 +54,8 @@ if ($Platform -eq "UNA") {$CBiosFile = '../CBIOS/cbios_una.bin'} else {$CBiosFil "Building ${RomName}: ${ROMSize}KB ROM configuration ${Config} for Z${CPUType}..." "" -$TimeStamp = '"' + (Get-Date -Format 'dd-MMM-yyyy') + '"' +# $TimeStamp = '"' + (Get-Date -Format 'dd-MMM-yyyy') + '"' +$TimeStamp = '"' + (Get-Date -Format 'yyyy-MM-dd') + '"' Function Asm($Component, $Opt, $Architecture=$CPUType, $Output="${Component}.bin") { diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index a17b324d..eaf3e0f4 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -376,23 +376,34 @@ FD_DISPATCH: ; DISPATCH ACCORDING TO DISK SUB-FUNCTION LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JP Z,FD_SEEK ; SUB-FUNC 0: SEEK + JP Z,FD_STATUS ; SUB-FUNC 0: STATUS DEC A - JP Z,FD_READ ; SUB-FUNC 1: READ + JP Z,FD_RESET ; SUB-FUNC 1: RESET DEC A - JP Z,FD_WRITE ; SUB-FUNC 2: WRITE + JP Z,FD_SEEK ; SUB-FUNC 2: SEEK DEC A - JP Z,FD_STATUS ; SUB-FUNC 3: STATUS + JP Z,FD_READ ; SUB-FUNC 3: READ SECTORS DEC A - JP Z,FD_RESET ; SUB-FUNC 4: RESET + JP Z,FD_WRITE ; SUB-FUNC 4: WRITE SECTORS DEC A - JP Z,FD_CAP ; SUB-FUNC 5: GET CAPACITY + JP Z,FD_VERIFY ; SUB-FUNC 5: VERIFY SECTORS DEC A - JP Z,FD_GEOM ; SUB-FUNC 6: GET GEOMETRY + JP Z,FD_FORMAT ; SUB-FUNC 6: FORMAT TRACK DEC A - JP Z,FD_GETPAR ; SUB-FUNC 7: GET PARAMETERS + JP Z,FD_SENSE ; SUB-FUNC 7: SENSE MEDIA DEC A - JP Z,FD_SETPAR ; SUB-FUNC 8: SET PARAMETERS + JP Z,FD_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,FD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,FD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,FD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +FD_VERIFY: +FD_FORMAT: +FD_GETPAR: +FD_SETPAR: CALL PANIC ; INVALID SUB-FUNCTION ;; ; LD A,B ; GET REQUESTED FUNCTION @@ -410,9 +421,9 @@ FD_DISPATCH: ; JP Z,FD_GEOM ; CALL PANIC ; -; FD_GETPAR +; FD_SENSE ; -FD_GETPAR: +FD_SENSE: ;CALL FD_SELECTUNIT #IF (FDMAUTO) @@ -493,13 +504,6 @@ FD_MEDIA3: ; ; ; -FD_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; FD_CAP: CALL FD_GEOM ; GET GEOMETRY ; HL=TRACKS, D=HEADS, E=SECTORS diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 4b7d7fc3..996ccb78 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -57,7 +57,6 @@ HCB .FILL $100,$FF ; RESERVED FOR HBIOS CONTROL BLOCK ;================================================================================================== ; ; THE FOLLOWING CODE IS RELOCATED TO THE TOP OF MEMORY TO HANDLE INVOCATION DISPATCHING -; AFTER RELOCATION THIS AREA (1K) IS REUSED AS THE HBIOS PHYSICAL DISK READ/WRITE BUFFER ; .FILL (HBX_IMG - $) ; FILL TO START OF PROXY IMAGE START .ORG HBX_LOC ; ADJUST FOR RELOCATION @@ -511,10 +510,37 @@ HB_START: CALL PRTDEC PRTS("KB$") ; -; SET UP THE DEFAULT DISK BUFFER ADDRESS -; - LD HL,HB_BUF ; DEFAULT DISK XFR BUF ADDRESS - LD (DIOBUF),HL ; SAVE IT +; INITIALIZE HEAP STORAGE VARIABLES +; + LD DE,HB_END ; GET ADDRESS OF START OF HEAP +; + ; HEAP STARTS AT END OF HBIOS + LD HL,HCB + HCB_HEAP ; POINT TO HEAP START ADDRESS VARIABLE + LD (HL),E ; SAVE LSB + INC HL ; BUMP + LD (HL),D ; SAVE MSB +; + ; INIT HEAP TOP TO HEAP START + LD HL,HCB + HCB_HEAPTOP ; POINT TO HEAP TOP ADDRESS VARIABLE + LD (HL),E ; SAVE LSB + INC HL ; BUMP + LD (HL),D ; SAVE MSB +; + ; CLEAR HEAP + LD HL,HB_END ; START OF HEAP + LD BC,BNKTOP - HB_END ; MAX SIZE OF HEAP + LD A,$FF ; FILL WITH $FF + CALL FILL ; DO IT +;; +;; +;; ALLOCATE THE DEFAULT DISK BUFFER ADDRESS +;; +; LD HL,512 ; 512 BYTES +; CALL HB_ALLOC ; ALLOCATE SPACE ON HEAP +; CALL NZ,PANIC ; PANIC ON ERROR +;; +; LD (DIOBUFDEF),HL ; SET DEFAULT +; LD (DIOBUF),HL ; INIT CURRENT BUF ADDRESS ; ; PERFORM DEVICE INITIALIZATION ; @@ -850,6 +876,9 @@ DIO_RW: POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A LD HL,(DIOBUF) ; GET BUFFER ADDRESS + LD A,H ; TEST DIOBUF + OR L ; FOR VALUE OF ZERO + CALL Z,PANIC ; ERROR IF DIOBUF NOT SET LD DE,1 ; TRANSFER ONE SECTOR JR NDIO_DISPATCH ; RETURN VIA DISPATCHER @@ -857,13 +886,13 @@ DIO_RW: ; DISK: SHIM FOR OLD STYLE STATUS CALL ; DIO_STAT: - LD B,BF_NDIOSTAT + LD B,BF_NDIOSTATUS JR NDIO_DISPATCH ; ; DISK: SHIM FOR OLD STYLE MEDIA CALL ; DIO_MEDIA: - LD B,BF_NDIOGETPAR + LD B,BF_NDIOSENSE CALL NDIO_DISPATCH LD A,E OR A @@ -881,9 +910,10 @@ DIO_GETBUF: DIO_SETBUF: LD A,H ; TEST HL OR L ; ... FOR ZERO - JR NZ,DIO_SETBUF1 ; IF NOT, PROCEED TO SET BUF ADR - LD HL,HB_BUF ; IF ZERO, SET TO DEFAULT ADR -DIO_SETBUF1: + CALL Z,PANIC ; NO LONGER SUPPORT DEFAULT BUFFER! + ;JR NZ,DIO_SETBUF1 ; IF NOT, PROCEED TO SET BUF ADR + ;LD HL,(DIOBUFDEF) ; IF ZERO, SET TO DEFAULT PREALLOCATED ADR +;DIO_SETBUF1: LD (DIOBUF),HL ; RECORD NEW DISK BUFFER ADDRESS XOR A ; SIGNALS SUCCESS RET @@ -1212,6 +1242,7 @@ SYS_DISPATCH: JP Z,SYS_XCOPY ; $F3 DEC A ;JR Z,SYS_ATTR ; $F4 + JR Z,SYS_ALLOC ; $F4 DEC A ;JR Z,SYS_XXXX ; $F5 DEC A @@ -1267,6 +1298,15 @@ SYS_XCOPY: XOR A RET ; +; ALLOCATE HL BYTES OF MEMORY FROM HBIOS HEAP +; RETURNS POINTER TO ALLOCATED MEMORY IN HL +; ON SUCCESS RETURN A == 0, AND Z SET +; ON FAILURE A <> 0 AND NZ SET AND HL TRASHED +; ALL OTHER REGISTERS PRESERVED +; +SYS_ALLOC: + JP HB_ALLOC +; ; GET THE CURRENT HBIOS VERSION ; RETURNS VERSION IN DE AS BCD ; D: MAJOR VERION IN TOP 4 BITS, MINOR VERSION IN LOW 4 BITS @@ -1356,6 +1396,66 @@ HB_BADINT: ; BNKCPY .EQU HB_BNKCPY ; +; ALLOCATE HL BYTES OF MEMORY ON THE HEAP +; RETURNS POINTER TO ALLOCATED SPACE IN HL +; ON SUCCESS RETURN A == 0, AND Z SET +; ON FAILURE A <> 0 AND NZ SET AND HL TRASHED +; ALL OTHER REGISTERS PRESERVED +; +; A 4 BYTE HEADER IS PLACED IN FRONT OF THE ALLOCATED MEMORY +; - DWORD: SIZE OF MEMROY ALLOCATED (DOES NOT INCLUDE 4 BYTE HEADER) +; - DWORD: ADDRESS WHERE ALLOC WAS CALLED (VALUE ON TOP OF STACK AT CALL) +; +HB_ALLOC: + ; SAVE ALLOC SIZE AND REFERENCE ADR FOR SUBSEQUENT HEADER CONSTRUCTION + LD (HB_TMPSZ),HL ; SAVE INCOMING SIZE REQUESTED + POP HL ; GET RETURN ADDRESS + LD (HB_TMPREF),HL ; SAVE AS REFERENCE + PUSH HL ; PUT IT BACK ON STACK + LD HL,(HB_TMPSZ) ; RECOVER INCOMING MEM SIZE PARM +; + ; CALC NEW HEAP TOP AND HANDLE OUT-OF-SPACE ERROR + PUSH DE ; SAVE INCOMING DE + LD DE,4 ; SIZE OF HEADER + ADD HL,DE ; ADD IT IN + JR C,HB_ALLOC1 ; ERROR ON OVERFLOW + LD DE,(HCB + HCB_HEAPTOP) ; CURRENT HEAP TOP + ADD HL,DE ; ADD IT IN, HL := NEW HEAP TOP + JR C,HB_ALLOC1 ; ERROR ON OVERFLOW + BIT 7,H ; TEST PAST END OF BANK (>= 32K) + JR NZ,HB_ALLOC1 ; ERROR IF PAST END +; + ; SAVE NEW HEAP TOP + LD DE,(HCB + HCB_HEAPTOP) ; GET ORIGINAL HEAP TOP + LD (HCB + HCB_HEAPTOP),HL ; SAVE NEW HEAP TOP +; + ; SET HEADER VALUES + EX DE,HL ; HEADER ADR TO HL + LD DE,(HB_TMPSZ) ; GET THE ORIG SIZE REQUESTED + LD (HL),E ; SAVE SIZE (LSB) + INC HL ; BUMP HEADER POINTER + LD (HL),D ; SAVE SIZE (MSB) + INC HL ; BUMP HEADER POINTER + LD DE,(HB_TMPREF) ; GET THE REFERENCE ADR + LD (HL),E ; SAVE REF ADR (LSB) + INC HL ; BUMP HEADER POINTER + LD (HL),D ; SAVE REF ADR (MSB) + INC HL ; BUMP HEADER POINTER +; + ; RETURN SUCCESS, HL POINTS TO START OF ALLOCATED MEMORY (PAST HEADER) + POP DE ; RESTORE INCOMING DE + XOR A ; SIGNAL SUCCESS + RET ; AND RETURN +; +HB_ALLOC1: + ; ERROR RETURN + POP DE ; RESTORE INCOMING DE + OR $FF ; SIGNAL ERROR + RET ; AND RETURN +; +HB_TMPSZ .DW 0 +HB_TMPREF .DW 0 +; ;================================================================================================== ; DEVICE DRIVERS ;================================================================================================== @@ -1801,13 +1901,14 @@ IDLECOUNT .DB 0 HSTLBA .EQU $ ; REFERS TO START OF 32-BIT LBA ; LBA LOW WORD -OR- TRACK HSTLBALO .EQU $ ; BLOCK ADDRESS LBA LOW WORD -HSTTRK .DW 0 ; BLOCK ADDRESS TRACK +HSTTRK .DW 0 ; CYLINDER (0-65535) ; LBA HIGH WORD -OR- HEAD/SECTOR HSTLBAHI .EQU $ ; BLOCK ADDRESS LBA HIGH WORD -HSTSEC .DB 0 ; BLOCK ADDRESS SECTOR -HSTHEAD .DB 0 ; BLOCK ADDRESS HEAD +HSTSEC .DB 0 ; SECTOR (0-255) +HSTHEAD .DB 0 ; HEAD (0-255) ; -DIOBUF .DW HB_BUF ; PTR TO 1024 BYTE DISK XFR BUFFER +DIOBUF .DW 0 ; PTR TO CURRENT DISK XFR BUFFER +;DIOBUFDEF .DW 0 ; PTR TO DEFAULT PREALLOCATED DISK XFR BUFFER ; HB_INTSTKSAV .DW 0 ; SAVED STACK POINTER DURING INT PROCESSING .FILL $40,$FF ; 32 ENTRY STACK FOR INTERRUPT PROCESSING @@ -1816,11 +1917,11 @@ HB_INTSTK .EQU $ ; TOP OF INTERRUPT PROCESSING STACK ; STR_BANNER .DB "SBC HBIOS v", BIOSVER, ", ", TIMESTAMP, "$" STR_PLATFORM .DB PLATFORM_NAME, "$" -STR_SWITCH .DB "*** Console switch to CRT device ***$" +STR_SWITCH .DB "*** Activating CRT Console ***$" ; HB_TMPBUF .FILL 512,0 ; INTERNAL DISK BUFFER ; -HB_BUF .EQU $ ; PHYSICAL DISK BUFFER +;HB_BUF .EQU $ ; PHYSICAL DISK BUFFER HB_END .EXPORT HB_END ; EXPORT ENDING ADDRESS ; SLACK .EQU BNKTOP - $ diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 294127d6..55ca8a8d 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -23,15 +23,18 @@ BF_DIOGETCNT .EQU BF_DIO + 10 ; DISK DEVICE COUNT BF_DIOGETINF .EQU BF_DIO + 11 ; DISK DEVICE INFO ; BF_NDIO .EQU $50 -BF_NDIOSEEK .EQU BF_DIO + 0 ; DISK SEEK -BF_NDIOREAD .EQU BF_DIO + 1 ; DISK READ -BF_NDIOWRITE .EQU BF_DIO + 2 ; DISK WRITE -BF_NDIOSTAT .EQU BF_DIO + 3 ; DISK STATUS -BF_NDIORESET .EQU BF_DIO + 4 ; DISK RESET -BF_NDIOCAP .EQU BF_DIO + 5 ; GET DISK CAPACITY -BF_NDIOGEOM .EQU BF_DIO + 6 ; GET DISK GEOMETRY -BF_NDIOGETPAR .EQU BF_DIO + 7 ; GET DISK PARAMS -BF_NDIOSETPAR .EQU BF_DIO + 8 ; SET DISK PARAMS +BF_NDIOSTATUS .EQU BF_DIO + 0 ; DISK STATUS +BF_NDIORESET .EQU BF_DIO + 1 ; DISK RESET +BF_NDIOSEEK .EQU BF_DIO + 2 ; DISK SEEK +BF_NDIOREAD .EQU BF_DIO + 3 ; DISK READ SECTORS +BF_NDIOWRITE .EQU BF_DIO + 4 ; DISK WRITE SECTORS +BF_NDIOVERIFY .EQU BF_DIO + 5 ; DISK VERIFY SECTORS +BF_NDIOFORMAT .EQU BF_DIO + 6 ; DISK FORMAT TRACK +BF_NDIOSENSE .EQU BF_DIO + 7 ; DISK SENSE MEDIA +BF_NDIOCAP .EQU BF_DIO + 8 ; GET DISK CAPACITY +BF_NDIOGEOM .EQU BF_DIO + 9 ; GET DISK GEOMETRY +BF_NDIOGETPAR .EQU BF_DIO + 10 ; GET DISK PARAMS +BF_NDIOSETPAR .EQU BF_DIO + 11 ; SET DISK PARAMS ; BF_RTC .EQU $20 BF_RTCGETTIM .EQU BF_RTC + 0 ; GET TIME @@ -71,6 +74,7 @@ BF_SYSSETBNK .EQU BF_SYS + 0 ; SET CURRENT BANK BF_SYSGETBNK .EQU BF_SYS + 1 ; GET CURRENT BANK BF_SYSCPY .EQU BF_SYS + 2 ; COPY TO/FROM RAM/ROM MEMORY BANK BF_SYSXCPY .EQU BF_SYS + 3 ; EXTENDED COPY SETUP +BF_SYSALLOC .EQU BF_SYS + 4 ; ALLOC HBIOS HEAP MEMORY BF_SYSGETVER .EQU BF_SYS + 6 ; GET VERSION OF HBIOS BF_SYSHCBGETB .EQU BF_SYS + 8 ; GET HCB BYTE VALUE BF_SYSHCBPUTB .EQU BF_SYS + 9 ; PUT HCB BYTE VALUE @@ -130,7 +134,10 @@ HCB_CRTDEV .EQU $0E ; CRT DISPLAY DEVICE/UNIT (BYTE) HCB_CONDEV .EQU $0F ; ACTIVE CONSOLE DEVICE/UNIT (BYTE) HCB_CUREMU .EQU $10 ; CURRENT VDA TERMINAL EMULATION HCB_CURVDA .EQU $11 ; CURRENT VDA TARGET FOR EMULATION - +; +HCB_HEAP .EQU $20 ; DWORD ADDRESS OF START OF HEAP +HCB_HEAPTOP .EQU $22 ; DWORD ADDRESS OF TOP OF HEAP +; ; MEMORY BANK IDS (ONE BYTE EACH) HCB_BIDCOM .EQU $D8 ; COMMON BANK (UPPER 32K) HCB_BIDUSR .EQU $D9 ; USER BANK (TPA) diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index ba2ecacc..213bfc9d 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -44,23 +44,34 @@ HDSK_DISPATCH: ; DISPATCH ACCORDING TO DISK SUB-FUNCTION LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JP Z,HDSK_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW + JP Z,HDSK_STATUS ; SUB-FUNC 0: STATUS DEC A - JP Z,HDSK_READ ; SUB-FUNC 1: READ + JP Z,HDSK_RESET ; SUB-FUNC 1: RESET DEC A - JP Z,HDSK_WRITE ; SUB-FUNC 2: WRITE + JP Z,HDSK_SEEK ; SUB-FUNC 2: SEEK DEC A - JP Z,HDSK_STATUS ; SUB-FUNC 3: STATUS + JP Z,HDSK_READ ; SUB-FUNC 3: READ SECTORS DEC A - JP Z,HDSK_RESET ; SUB-FUNC 4: RESET + JP Z,HDSK_WRITE ; SUB-FUNC 4: WRITE SECTORS DEC A - JP Z,HDSK_CAP ; SUB-FUNC 5: GET CAPACITY + JP Z,HDSK_VERIFY ; SUB-FUNC 5: VERIFY SECTORS DEC A - JP Z,HDSK_GEOM ; SUB-FUNC 6: GET GEOMETRY + JP Z,HDSK_FORMAT ; SUB-FUNC 6: FORMAT TRACK DEC A - JP Z,HDSK_GETPAR ; SUB-FUNC 7: GET PARAMETERS + JP Z,HDSK_SENSE ; SUB-FUNC 7: SENSE MEDIA DEC A - JP Z,HDSK_SETPAR ; SUB-FUNC 8: SET PARAMETERS + JP Z,HDSK_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,HDSK_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,HDSK_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,HDSK_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +HDSK_VERIFY: +HDSK_FORMAT: +HDSK_GETPAR: +HDSK_SETPAR: CALL PANIC ; INVALID SUB-FUNCTION ; ; @@ -76,6 +87,14 @@ HDSK_RESET: XOR A ; ALWAYS OK RET ; +; +; +HDSK_SENSE: + LD A,MID_HD ; HARD DISK MEDIA + LD E,A ; VALUE TO E + XOR A ; SIGNAL SUCCESS + RET +; ; GET DISK CAPACITY ; RETURN DE:HL=BLOCK COUNT, BC=BLOCK SIZE ; SLICE C/H/S = 65/16/16 OR 16,640 TOTAL SECTORS @@ -103,21 +122,6 @@ HDSK_GEOM: ; ; ; -HDSK_GETPAR: - LD A,MID_HD ; HARD DISK MEDIA - LD E,A ; VALUE TO E - XOR A ; SIGNAL SUCCESS - RET -; -; -; -HDSK_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; HDSK_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 545fe795..b0a756c5 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -301,26 +301,37 @@ IDE_DISPATCH: ;CALL IDE_SELUNIT ; SELECT DESIRED UNIT ; ; DISPATCH ACCORDING TO DISK SUB-FUNCTION - LD A,B ; GET REQUESTED FUNCTION - AND $0F ; ISOLATE SUB-FUNCTION - JP Z,IDE_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW - DEC A - JP Z,IDE_READ ; SUB-FUNC 1: READ - DEC A - JP Z,IDE_WRITE ; SUB-FUNC 2: WRITE - DEC A - JP Z,IDE_STATUS ; SUB-FUNC 3: STATUS - DEC A - JP Z,IDE_RESET ; SUB-FUNC 4: RESET - DEC A - JP Z,IDE_CAP ; SUB-FUNC 5: GET CAPACITY - DEC A - JP Z,IDE_GEOM ; SUB-FUNC 6: GET GEOMETRY - DEC A - JP Z,IDE_GETPAR ; SUB-FUNC 7: GET PARAMETERS - DEC A - JP Z,IDE_SETPAR ; SUB-FUNC 8: SET PARAMETERS - CALL PANIC ; INVALID SUB-FUNCTION + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,IDE_STATUS ; SUB-FUNC 0: STATUS + DEC A + JP Z,IDE_RESET ; SUB-FUNC 1: RESET + DEC A + JP Z,IDE_SEEK ; SUB-FUNC 2: SEEK + DEC A + JP Z,IDE_READ ; SUB-FUNC 3: READ SECTORS + DEC A + JP Z,IDE_WRITE ; SUB-FUNC 4: WRITE SECTORS + DEC A + JP Z,IDE_VERIFY ; SUB-FUNC 5: VERIFY SECTORS + DEC A + JP Z,IDE_FORMAT ; SUB-FUNC 6: FORMAT TRACK + DEC A + JP Z,IDE_SENSE ; SUB-FUNC 7: SENSE MEDIA + DEC A + JP Z,IDE_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,IDE_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,IDE_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,IDE_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +IDE_VERIFY: +IDE_FORMAT: +IDE_GETPAR: +IDE_SETPAR: + CALL PANIC ; INVALID SUB-FUNCTION ; ; ; @@ -353,9 +364,9 @@ IDE_STATUS: OR A ; SET FLAGS RET ; AND RETURN ; -; IDE_MEDIA +; IDE_SENSE ; -IDE_GETPAR: +IDE_SENSE: ; THE ONLY WAY TO RESET AN IDE DEVICE IS TO RESET ; THE ENTIRE INTERFACE. SO, TO HANDLE POSSIBLE HOT ; SWAP WE DO THAT, THEN RESELECT THE DESIRED UNIT AND @@ -380,13 +391,6 @@ IDE_GETPAR: ; ; ; -IDE_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; IDE_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA diff --git a/Source/HBIOS/loader.asm b/Source/HBIOS/loader.asm index 89b975c1..50bf6ffa 100644 --- a/Source/HBIOS/loader.asm +++ b/Source/HBIOS/loader.asm @@ -35,7 +35,13 @@ CB_CONDEV .DB SERDEV ; CB_CUREMU .DB VDAEMU ; CURRENT VDA TERMINAL EMULATION CB_CURVDA .DB VDADEV ; CURRENT VDA TARGET FOR EMULATION - +; +; MEMORY MANAGEMENT VARIABLES START AT $20 +; + .FILL (CB + $20 - $),0 +; +CB_HEAP .DW 0 +CB_HEAPTOP .DW 0 ; ; STANDARD BANK ID'S START AT $D8 ; @@ -49,7 +55,6 @@ CB_BIDRAMD0 .DB BID_RAMD0 CB_BIDRAMDN .DB BID_RAMDN CB_BIDROMD0 .DB BID_ROMD0 CB_BIDROMDN .DB BID_ROMDN - ; ; DEVICE LISTS START AT $E0 ; diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 8f99d34a..de8da278 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -32,23 +32,34 @@ MD_DISPATCH: ; DISPATCH ACCORDING TO DISK SUB-FUNCTION LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JP Z,MD_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW + JP Z,MD_STATUS ; SUB-FUNC 0: STATUS DEC A - JP Z,MD_READ ; SUB-FUNC 1: READ + JP Z,MD_RESET ; SUB-FUNC 1: RESET DEC A - JP Z,MD_WRITE ; SUB-FUNC 2: WRITE + JP Z,MD_SEEK ; SUB-FUNC 2: SEEK DEC A - JP Z,MD_STATUS ; SUB-FUNC 3: STATUS + JP Z,MD_READ ; SUB-FUNC 3: READ SECTORS DEC A - JP Z,MD_RESET ; SUB-FUNC 4: RESET + JP Z,MD_WRITE ; SUB-FUNC 4: WRITE SECTORS DEC A - JP Z,MD_CAP ; SUB-FUNC 5: GET CAPACITY + JP Z,MD_VERIFY ; SUB-FUNC 5: VERIFY SECTORS DEC A - JP Z,MD_GEOM ; SUB-FUNC 6: GET GEOMETRY + JP Z,MD_FORMAT ; SUB-FUNC 6: FORMAT TRACK DEC A - JP Z,MD_GETPAR ; SUB-FUNC 7: GET PARAMETERS + JP Z,MD_SENSE ; SUB-FUNC 7: SENSE MEDIA DEC A - JP Z,MD_SETPAR ; SUB-FUNC 8: SET PARAMETERS + JP Z,MD_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,MD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,MD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,MD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +MD_VERIFY: +MD_FORMAT: +MD_GETPAR: +MD_SETPAR: CALL PANIC ; INVALID SUB-FUNCTION ; ; @@ -65,6 +76,15 @@ MD_RESET: ; ; ; +MD_SENSE: + LD A,C ; DEVICE/UNIT IS IN C + ADD A,MID_MDROM ; SET CORRECT MEDIA VALUE + LD E,A ; VALUE TO E + XOR A ; SIGNAL SUCCESS + RET +; +; +; MD_CAP: LD A,C ; DEVICE/UNIT IS IN C AND $0F ; ISOLATE UNIT NUM @@ -104,22 +124,6 @@ MD_GEOM1: ; ; ; -MD_GETPAR: - LD A,C ; DEVICE/UNIT IS IN C - ADD A,MID_MDROM ; SET CORRECT MEDIA VALUE - LD E,A ; VALUE TO E - XOR A ; SIGNAL SUCCESS - RET -; -; -; -MD_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; MD_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index 07d9bb45..fbe774e5 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -156,11 +156,11 @@ PPIDE_UNITCNT .EQU 2 ; ASSUME ONLY PRIMARY INTERFACE ; ; COMMAND BYTES ; -PPIDE_CMD_RECAL .EQU $10 -PPIDE_CMD_READ .EQU $20 -PPIDE_CMD_WRITE .EQU $30 -PPIDE_CMD_IDDEV .EQU $EC -PPIDE_CMD_SETFEAT .EQU $EF +PPIDE_CPPIDE_RECAL .EQU $10 +PPIDE_CPPIDE_READ .EQU $20 +PPIDE_CPPIDE_WRITE .EQU $30 +PPIDE_CPPIDE_IDDEV .EQU $EC +PPIDE_CPPIDE_SETFEAT .EQU $EF ; ; FEATURE BYTES ; @@ -292,26 +292,37 @@ PPIDE_DISPATCH: ;CALL PPIDE_SELUNIT ; SELECT DESIRED UNIT ; ; DISPATCH ACCORDING TO DISK SUB-FUNCTION - LD A,B ; GET REQUESTED FUNCTION - AND $0F ; ISOLATE SUB-FUNCTION - JP Z,PPIDE_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW - DEC A - JP Z,PPIDE_READ ; SUB-FUNC 1: READ - DEC A - JP Z,PPIDE_WRITE ; SUB-FUNC 2: WRITE - DEC A - JP Z,PPIDE_STATUS ; SUB-FUNC 3: STATUS - DEC A - JP Z,PPIDE_RESET ; SUB-FUNC 4: RESET - DEC A - JP Z,PPIDE_CAP ; SUB-FUNC 5: GET CAPACITY - DEC A - JP Z,PPIDE_GEOM ; SUB-FUNC 6: GET GEOMETRY - DEC A - JP Z,PPIDE_GETPAR ; SUB-FUNC 7: GET PARAMETERS - DEC A - JP Z,PPIDE_SETPAR ; SUB-FUNC 8: SET PARAMETERS - CALL PANIC ; INVALID SUB-FUNCTION + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,PPIDE_STATUS ; SUB-FUNC 0: STATUS + DEC A + JP Z,PPIDE_RESET ; SUB-FUNC 1: RESET + DEC A + JP Z,PPIDE_SEEK ; SUB-FUNC 2: SEEK + DEC A + JP Z,PPIDE_READ ; SUB-FUNC 3: READ SECTORS + DEC A + JP Z,PPIDE_WRITE ; SUB-FUNC 4: WRITE SECTORS + DEC A + JP Z,PPIDE_VERIFY ; SUB-FUNC 5: VERIFY SECTORS + DEC A + JP Z,PPIDE_FORMAT ; SUB-FUNC 6: FORMAT TRACK + DEC A + JP Z,PPIDE_SENSE ; SUB-FUNC 7: SENSE MEDIA + DEC A + JP Z,PPIDE_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,PPIDE_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,PPIDE_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,PPIDE_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +PPIDE_VERIFY: +PPIDE_FORMAT: +PPIDE_GETPAR: +PPIDE_SETPAR: + CALL PANIC ; INVALID SUB-FUNCTION ; ; ; @@ -342,9 +353,9 @@ PPIDE_STATUS: OR A ; SET FLAGS RET ; AND RETURN ; -; PPIDE_MEDIA +; PPIDE_SENSE ; -PPIDE_GETPAR: +PPIDE_SENSE: ; THE ONLY WAY TO RESET AN IDE DEVICE IS TO RESET ; THE ENTIRE INTERFACE. SO, TO HANDLE POSSIBLE HOT ; SWAP WE DO THAT, THEN RESELECT THE DESIRED UNIT AND @@ -369,13 +380,6 @@ PPIDE_GETPAR: ; ; ; -PPIDE_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; PPIDE_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA @@ -431,7 +435,7 @@ PPIDE_SETFEAT: .DB PPIDE_REG_FEAT DCALL PC_SPACE DCALL PRTHEXBYTE - LD A,PPIDE_CMD_SETFEAT ; CMD = SETFEAT + LD A,PPIDE_CPPIDE_SETFEAT ; CMD = SETFEAT LD (PPIDE_CMD),A ; SAVE IT JP PPIDE_RUNCMD ; RUN COMMAND AND EXIT ; @@ -448,7 +452,7 @@ PPIDE_IDENTIFY: .DB PPIDE_REG_DRVHD DCALL PC_SPACE DCALL PRTHEXBYTE - LD A,PPIDE_CMD_IDDEV + LD A,PPIDE_CPPIDE_IDDEV LD (PPIDE_CMD),A CALL PPIDE_RUNCMD RET NZ @@ -472,7 +476,7 @@ PPIDE_RDSEC: DCALL PC_SPACE DCALL PRTHEXBYTE CALL PPIDE_SETADDR ; SETUP CYL, TRK, HEAD - LD A,PPIDE_CMD_READ + LD A,PPIDE_CPPIDE_READ LD (PPIDE_CMD),A CALL PPIDE_RUNCMD RET NZ @@ -494,7 +498,7 @@ PPIDE_WRSEC: DCALL PC_SPACE DCALL PRTHEXBYTE CALL PPIDE_SETADDR ; SETUP CYL, TRK, HEAD - LD A,PPIDE_CMD_WRITE + LD A,PPIDE_CPPIDE_WRITE LD (PPIDE_CMD),A CALL PPIDE_RUNCMD RET NZ diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 7d8fa521..6854e8ed 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -379,23 +379,34 @@ PPPSD_DISPATCH: ; DISPATCH ACCORDING TO DISK SUB-FUNCTION LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JP Z,PPPSD_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW + JP Z,PPPSD_STATUS ; SUB-FUNC 0: STATUS DEC A - JP Z,PPPSD_READ ; SUB-FUNC 1: READ + JP Z,PPPSD_RESET ; SUB-FUNC 1: RESET DEC A - JP Z,PPPSD_WRITE ; SUB-FUNC 2: WRITE + JP Z,PPPSD_SEEK ; SUB-FUNC 2: SEEK DEC A - JP Z,PPPSD_STATUS ; SUB-FUNC 3: STATUS + JP Z,PPPSD_READ ; SUB-FUNC 3: READ SECTORS DEC A - JP Z,PPPSD_RESET ; SUB-FUNC 4: RESET + JP Z,PPPSD_WRITE ; SUB-FUNC 4: WRITE SECTORS DEC A - JP Z,PPPSD_CAP ; SUB-FUNC 5: GET CAPACITY + JP Z,PPPSD_VERIFY ; SUB-FUNC 5: VERIFY SECTORS DEC A - JP Z,PPPSD_GEOM ; SUB-FUNC 6: GET GEOMETRY + JP Z,PPPSD_FORMAT ; SUB-FUNC 6: FORMAT TRACK DEC A - JP Z,PPPSD_GETPAR ; SUB-FUNC 7: GET PARAMETERS + JP Z,PPPSD_SENSE ; SUB-FUNC 7: SENSE MEDIA DEC A - JP Z,PPPSD_SETPAR ; SUB-FUNC 8: SET PARAMETERS + JP Z,PPPSD_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,PPPSD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,PPPSD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,PPPSD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +PPPSD_VERIFY: +PPPSD_FORMAT: +PPPSD_GETPAR: +PPPSD_SETPAR: CALL PANIC ; INVALID SUB-FUNCTION ; ; READ AN LBA BLOCK FROM THE SD CARD @@ -535,7 +546,7 @@ PPPSD_RESET: ; SETUP FOR SUBSEQUENT ACCESS ; INIT CARD IF NOT READY OR ON DRIVE LOG IN ; -PPPSD_GETPAR: +PPPSD_SENSE: ; REINITIALIZE THE CARD HERE TO DETERMINE PRESENCE CALL PPPSD_INITCARD #IF (PPPSDTRACE == 1) @@ -548,13 +559,6 @@ PPPSD_GETPAR: ; ; ; -PPPSD_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; PPPSD_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index 812dd6d1..b71d561c 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -273,27 +273,39 @@ PRPSD_DISPATCH: CP PRPSD_UNITCNT CALL NC,PANIC ; PANIC IF TOO HIGH LD (PRPSD_UNIT),A ; SAVE IT +; ; ; DISPATCH ACCORDING TO DISK SUB-FUNCTION LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JP Z,PRPSD_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW + JP Z,PRPSD_STATUS ; SUB-FUNC 0: STATUS + DEC A + JP Z,PRPSD_RESET ; SUB-FUNC 1: RESET + DEC A + JP Z,PRPSD_SEEK ; SUB-FUNC 2: SEEK + DEC A + JP Z,PRPSD_READ ; SUB-FUNC 3: READ SECTORS DEC A - JP Z,PRPSD_READ ; SUB-FUNC 1: READ + JP Z,PRPSD_WRITE ; SUB-FUNC 4: WRITE SECTORS DEC A - JP Z,PRPSD_WRITE ; SUB-FUNC 2: WRITE + JP Z,PRPSD_VERIFY ; SUB-FUNC 5: VERIFY SECTORS DEC A - JP Z,PRPSD_STATUS ; SUB-FUNC 3: STATUS + JP Z,PRPSD_FORMAT ; SUB-FUNC 6: FORMAT TRACK DEC A - JP Z,PRPSD_RESET ; SUB-FUNC 4: RESET + JP Z,PRPSD_SENSE ; SUB-FUNC 7: SENSE MEDIA DEC A - JP Z,PRPSD_CAP ; SUB-FUNC 5: GET CAPACITY + JP Z,PRPSD_CAP ; SUB-FUNC 8: GET DISK CAPACITY DEC A - JP Z,PRPSD_GEOM ; SUB-FUNC 6: GET GEOMETRY + JP Z,PRPSD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY DEC A - JP Z,PRPSD_GETPAR ; SUB-FUNC 7: GET PARAMETERS + JP Z,PRPSD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS DEC A - JP Z,PRPSD_SETPAR ; SUB-FUNC 8: SET PARAMETERS + JP Z,PRPSD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +PRPSD_VERIFY: +PRPSD_FORMAT: +PRPSD_GETPAR: +PRPSD_SETPAR: CALL PANIC ; INVALID SUB-FUNCTION ; ; @@ -394,9 +406,9 @@ PRPSD_RESET: XOR A ; ALWAYS OK RET ; -; PRPSD_GETPAR +; PRPSD_SENSE ; -PRPSD_GETPAR: +PRPSD_SENSE: ; REINITIALIZE THE CARD HERE CALL PRPSD_INITCARD #IF (PRPSDTRACE == 1) @@ -409,13 +421,6 @@ PRPSD_GETPAR: ; ; ; -PRPSD_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; PRPSD_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index 500d2cf4..df862694 100644 --- a/Source/HBIOS/rf.asm +++ b/Source/HBIOS/rf.asm @@ -38,28 +38,39 @@ RF_DISPATCH: ; DISPATCH ACCORDING TO DISK SUB-FUNCTION LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JP Z,RF_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW + JP Z,RF_STATUS ; SUB-FUNC 0: STATUS DEC A - JP Z,RF_READ ; SUB-FUNC 1: READ + JP Z,RF_RESET ; SUB-FUNC 1: RESET DEC A - JP Z,RF_WRITE ; SUB-FUNC 2: WRITE + JP Z,RF_SEEK ; SUB-FUNC 2: SEEK DEC A - JP Z,RF_STATUS ; SUB-FUNC 3: STATUS + JP Z,RF_READ ; SUB-FUNC 3: READ SECTORS DEC A - JP Z,RF_RESET ; SUB-FUNC 4: RESET + JP Z,RF_WRITE ; SUB-FUNC 4: WRITE SECTORS DEC A - JP Z,RF_CAP ; SUB-FUNC 5: GET CAPACITY + JP Z,RF_VERIFY ; SUB-FUNC 5: VERIFY SECTORS DEC A - JP Z,RF_GEOM ; SUB-FUNC 6: GET GEOMETRY + JP Z,RF_FORMAT ; SUB-FUNC 6: FORMAT TRACK DEC A - JP Z,RF_GETPAR ; SUB-FUNC 7: GET PARAMETERS + JP Z,RF_SENSE ; SUB-FUNC 7: SENSE MEDIA DEC A - JP Z,RF_SETPAR ; SUB-FUNC 8: SET PARAMETERS + JP Z,RF_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,RF_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,RF_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,RF_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +RF_VERIFY: +RF_FORMAT: +RF_GETPAR: +RF_SETPAR: CALL PANIC ; INVALID SUB-FUNCTION ; ; ; -RF_GETPAR: +RF_SENSE: LD A,C ; DEVICE/UNIT IS IN C ADD A,MID_RF ; SET CORRECT MEDIA VALUE LD E,A ; VALUE TO E @@ -68,13 +79,6 @@ RF_GETPAR: ; ; ; -RF_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; RF_STATUS: XOR A ; STATUS ALWAYS OK RET diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 7ba184c4..10e8d4a0 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -160,21 +160,21 @@ SD_TRDR .EQU Z180_TRDR ; ; SD CARD COMMANDS ; -SD_CMD_GO_IDLE_STATE .EQU $40 + 0 ; $40, CMD0 -> R1 -SD_CMD_SEND_OP_COND .EQU $40 + 1 ; $41, CMD1 -> R1 -SD_CMD_SEND_IF_COND .EQU $40 + 8 ; $48, CMD8 -> R7 -SD_CMD_SEND_CSD .EQU $40 + 9 ; $49, CMD9 -> R1 -SD_CMD_SEND_CID .EQU $40 + 10 ; $4A, CMD10 -> R1 -SD_CMD_SET_BLOCKLEN .EQU $40 + 16 ; $50, CMD16 -> R1 -SD_CMD_READ_SNGL_BLK .EQU $40 + 17 ; $51, CMD17 -> R1 -SD_CMD_WRITE_BLOCK .EQU $40 + 24 ; $58, CMD24 -> R1 -SD_CMD_APP_CMD .EQU $40 + 55 ; $77, CMD55 -> R1 -SD_CMD_READ_OCR .EQU $40 + 58 ; $7A, CMD58 -> R3 +SD_CSD_GO_IDLE_STATE .EQU $40 + 0 ; $40, CMD0 -> R1 +SD_CSD_SEND_OP_COND .EQU $40 + 1 ; $41, CMD1 -> R1 +SD_CSD_SEND_IF_COND .EQU $40 + 8 ; $48, CMD8 -> R7 +SD_CSD_SEND_CSD .EQU $40 + 9 ; $49, CMD9 -> R1 +SD_CSD_SEND_CID .EQU $40 + 10 ; $4A, CMD10 -> R1 +SD_CSD_SET_BLOCKLEN .EQU $40 + 16 ; $50, CMD16 -> R1 +SD_CSD_READ_SNGL_BLK .EQU $40 + 17 ; $51, CMD17 -> R1 +SD_CSD_WRITE_BLOCK .EQU $40 + 24 ; $58, CMD24 -> R1 +SD_CSD_APP_CMD .EQU $40 + 55 ; $77, CMD55 -> R1 +SD_CSD_READ_OCR .EQU $40 + 58 ; $7A, CMD58 -> R3 ; ; SD CARD APPLICATION COMMANDS (PRECEDED BY APP_CMD COMMAND) ; -SD_ACMD_SEND_OP_COND .EQU $40 + 41 ; $69, ACMD41 -> R1 -SD_ACMD_SEND_SCR .EQU $40 + 51 ; $73, ACMD51 -> R1 +SD_ACSD_SEND_OP_COND .EQU $40 + 41 ; $69, ACMD41 -> R1 +SD_ACSD_SEND_SCR .EQU $40 + 51 ; $73, ACMD51 -> R1 ; ; SD CARD TYPE ; @@ -353,7 +353,7 @@ SD_INITUNIT1: CALL WRITESTR ; GET CID (WHICH CONTAINS PRODUCT NAME) - LD A,SD_CMD_SEND_CID ; SEND_CID + LD A,SD_CSD_SEND_CID ; SEND_CID CALL SD_INITCMD ; SETUP COMMAND BUFFER CALL SD_EXECCMD ; RUN COMMAND RET NZ ; ABORT ON ERROR @@ -415,26 +415,37 @@ SD_DISPATCH: ;CALL SD_SELUNIT ; SELECT DESIRED UNIT ; ; DISPATCH ACCORDING TO DISK SUB-FUNCTION - LD A,B ; GET REQUESTED FUNCTION - AND $0F ; ISOLATE SUB-FUNCTION - JP Z,SD_SEEK ; SUB-FUNC 0: SEEK, USE HBIOS FOR NOW - DEC A - JP Z,SD_READ ; SUB-FUNC 1: READ - DEC A - JP Z,SD_WRITE ; SUB-FUNC 2: WRITE - DEC A - JP Z,SD_STATUS ; SUB-FUNC 3: STATUS - DEC A - JP Z,SD_RESET ; SUB-FUNC 4: RESET - DEC A - JP Z,SD_CAP ; SUB-FUNC 5: GET CAPACITY - DEC A - JP Z,SD_GEOM ; SUB-FUNC 6: GET GEOMETRY - DEC A - JP Z,SD_GETPAR ; SUB-FUNC 7: GET PARAMETERS - DEC A - JP Z,SD_SETPAR ; SUB-FUNC 8: SET PARAMETERS - CALL PANIC ; INVALID SUB-FUNCTION + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,SD_STATUS ; SUB-FUNC 0: STATUS + DEC A + JP Z,SD_RESET ; SUB-FUNC 1: RESET + DEC A + JP Z,SD_SEEK ; SUB-FUNC 2: SEEK + DEC A + JP Z,SD_READ ; SUB-FUNC 3: READ SECTORS + DEC A + JP Z,SD_WRITE ; SUB-FUNC 4: WRITE SECTORS + DEC A + JP Z,SD_VERIFY ; SUB-FUNC 5: VERIFY SECTORS + DEC A + JP Z,SD_FORMAT ; SUB-FUNC 6: FORMAT TRACK + DEC A + JP Z,SD_SENSE ; SUB-FUNC 7: SENSE MEDIA + DEC A + JP Z,SD_CAP ; SUB-FUNC 8: GET DISK CAPACITY + DEC A + JP Z,SD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY + DEC A + JP Z,SD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS + DEC A + JP Z,SD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS +; +SD_VERIFY: +SD_FORMAT: +SD_GETPAR: +SD_SETPAR: + CALL PANIC ; INVALID SUB-FUNCTION ; ; ; @@ -446,7 +457,7 @@ SD_READ: #ENDIF CALL SD_SELUNIT ; READ A SECTOR - LD C,SD_CMD_READ_SNGL_BLK ; SET READ_SINGLE_BLOCK COMMAND + LD C,SD_CSD_READ_SNGL_BLK ; SET READ_SINGLE_BLOCK COMMAND JP SD_SECTIO ; DO SECTOR I/O ; ; @@ -461,7 +472,7 @@ SD_WRITE: CALL SD_CHKWP ; CHECK FOR WRITE PROTECT JP NZ,SD_WRTPROT ; HANDLE IT IF SO ; WRITE A SECTOR - LD C,SD_CMD_WRITE_BLOCK ; SET WRITE_BLOCK COMMAND + LD C,SD_CSD_WRITE_BLOCK ; SET WRITE_BLOCK COMMAND JP SD_SECTIO ; DO SECTOR I/O ; SD_STATUS: @@ -479,7 +490,7 @@ SD_RESET: ; ; ; -SD_GETPAR: +SD_SENSE: CALL SD_SELUNIT ; SET CUR UNIT ; RE-INITIALIZE THE SD CARD TO ACCOMMODATE HOT SWAPPING CALL SD_INITCARD ; RE-INIT SELECTED UNIT @@ -493,13 +504,6 @@ SD_GETPAR: ; ; ; -SD_SETPAR: - ; NOT IMPLEMENTED - XOR A - RET -; -; -; SD_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA @@ -568,7 +572,7 @@ SD_INITCARD2: ; ; CMD8 IS REQUIRED FOR V2 CARDS. FAILURE HERE IS OK AND ; JUST MEANS THAT IT IS A V1 CARD - LD A,SD_CMD_SEND_IF_COND ; SEND_IF_COND + LD A,SD_CSD_SEND_IF_COND ; SEND_IF_COND CALL SD_INITCMD ; SETUP COMMAND BUFFER LD HL,SD_CMDP2 ; POINT TO 3RD PARM BYTE LD (HL),1 ; VHS=1, 2.7-3.6V @@ -593,7 +597,7 @@ SD_INITCARD3: OR A ; SET FLAGS RET NZ ; ABORT IF ANY OTHER ERROR ; SEND APP_OP_COND - LD A,SD_ACMD_SEND_OP_COND ; SD_APP_OP_COND + LD A,SD_ACSD_SEND_OP_COND ; SD_APP_OP_COND CALL SD_INITCMD ; SETUP COMMAND BUFFER LD A,$40 ; P0 = $40 INDICATES WE SUPPORT V2 CARDS LD (SD_CMDP0),A ; SET COMMAND PARM 0 @@ -619,7 +623,7 @@ SD_INITCARD3B: LD DE,300 ; 16US * 300 = ~5MS CALL VDELAY ; CPU SPEED NORMALIZED DELAY ; SEND OP_COND COMMAND - LD A,SD_CMD_SEND_OP_COND ; SD_OP_COND + LD A,SD_CSD_SEND_OP_COND ; SD_OP_COND CALL SD_INITCMD ; SETUP COMMAND BUFFER CALL SD_EXECCMDND ; EXEC COMMAND WITH NO DATA RET NZ ; ABORT ON ERROR @@ -641,7 +645,7 @@ SD_INITCARD3C: SD_INITCARD4: ; CMD58 RETURNS THE 32 BIT OCR REGISTER (R3), WE WANT TO CHECK ; BIT 30, IF SET THIS IS SDHC/XC CARD - LD A,SD_CMD_READ_OCR ; READ_OCR + LD A,SD_CSD_READ_OCR ; READ_OCR CALL SD_INITCMD ; SETUP COMMAND BUFFER CALL SD_EXECCMD ; EXECUTE COMMAND RET NZ ; ABORT ON ERROR @@ -657,7 +661,7 @@ SD_INITCARD4A: ; SD_SPEC3 (BIT 47) IS SET IF CARD IS SDXC OR GREATER CALL SD_EXECACMD ; SEND APP COMMAND INTRODUCER RET NZ ; ABORT ON ERROR (THIS SHOULD ALWAYS WORK) - LD A,SD_ACMD_SEND_SCR ; APP CMD SEND_SCR + LD A,SD_ACSD_SEND_SCR ; APP CMD SEND_SCR CALL SD_INITCMD ; SETUP COMMAND BUFFER CALL SD_EXECCMD ; EXECUTE COMMAND RET NZ ; ABORT ON ERROR (THIS SHOULD ALWAYS WORK) @@ -699,7 +703,7 @@ SD_INITCARD5: #ENDIF ; SET OUR DESIRED BLOCK LENGTH (512 BYTES) - LD A,SD_CMD_SET_BLOCKLEN ; SET_BLOCKLEN + LD A,SD_CSD_SET_BLOCKLEN ; SET_BLOCKLEN CALL SD_INITCMD ; SETUP COMMAND BUFFER LD DE,512 ; 512 BYTE BLOCK LENGTH LD HL,SD_CMDP2 ; PUT VALUE INTO PARMS @@ -718,7 +722,7 @@ SD_INITCARD5: #ENDIF ; ; ISSUE SEND_CSD (TO DERIVE CARD CAPACITY) - LD A,SD_CMD_SEND_CSD ; SEND_CSD + LD A,SD_CSD_SEND_CSD ; SEND_CSD CALL SD_INITCMD ; SETUP COMMAND BUFFER CALL SD_EXECCMD ; EXECUTE COMMAND RET NZ ; ABORT ON ERROR @@ -848,9 +852,9 @@ SD_SECTIO: LD HL,(SD_DSKBUF) LD BC,512 ; LENGTH TO READ LD A,(SD_CMD) ; GET THE COMMAND - CP SD_CMD_READ_SNGL_BLK ; READ_SINGLE_BLOCK? + CP SD_CSD_READ_SNGL_BLK ; READ_SINGLE_BLOCK? JR Z,SD_SECTIO1 ; HANDLE READ - CP SD_CMD_WRITE_BLOCK ; WRITE_BLOCK? + CP SD_CSD_WRITE_BLOCK ; WRITE_BLOCK? JR Z,SD_SECTIO2 ; HANDLE WRITE CALL PANIC ; PANIC ON ANYTHING ELSE SD_SECTIO1: @@ -937,7 +941,7 @@ SD_GOIDLE1: ;CALL VDELAY ; CPU SPEED NORMALIZED DELAY ; PUT CARD IN IDLE STATE - LD A,SD_CMD_GO_IDLE_STATE ; CMD0 = ENTER IDLE STATE + LD A,SD_CSD_GO_IDLE_STATE ; CMD0 = ENTER IDLE STATE CALL SD_INITCMD ; INIT COMMAND BUFFER LD A,$95 ; CRC FOR GO_IDLE_STATE COMMAND IS $95 LD (SD_CMDCRC),A ; SET CRC @@ -967,7 +971,7 @@ SD_INITCMD1: ; EXECUTE APP COMMAND ; SD_EXECACMD: - LD A,SD_CMD_APP_CMD ; APP_CMD, AN APP CMD IS NEXT + LD A,SD_CSD_APP_CMD ; APP_CMD, AN APP CMD IS NEXT CALL SD_INITCMD ; SETUP COMMAND BUFFER JR SD_EXECCMDND ; EXEC COMMAND W/ NO DATA RETURNED ; @@ -1281,6 +1285,8 @@ SD_WAITRX: JR NZ,SD_WAITRX RET ; +#ENDIF +; ; SEND ONE BYTE ; SD_PUT: @@ -1354,9 +1360,9 @@ SD_GET1: LD A,C ; GET BYTE RECEIVED INTO A #IF (SDMODE == SDMODE_UART) XOR $FF ; DO IS INVERTED ON UART -#ENDIF #ENDIF RET +#ENDIF ; ;============================================================================= ; ERROR HANDLING AND DIAGNOSTICS @@ -1643,7 +1649,7 @@ SD_DPTRIMP: ; MSB<-->LSB MIRROR BITS IN A, RESULT IN C ; MIRROR: - #IF (SDCSIOFAST) ; SLOW SPEED, LEAST CODE SPACE +#IF (SDCSIOFAST) ; SLOW SPEED, LEAST CODE SPACE LD BC,MIRTAB ; 256 BYTE MIRROR TABLE ADD A,C ; ADD OFFSET LD C,A @@ -1653,14 +1659,13 @@ MIRROR2: LD A,(BC) ; GET RESULT LD C,A ; RETURN RESULT IN C RET - #ELSE ; FASTEST BUT USES MOST CODE SPACE +#ELSE ; FASTEST BUT USES MOST CODE SPACE LD B,8 ; BIT COUNTER MIRROR1: RLA ; ROTATE BIT 7 INTO CARRY RR C ; ROTATE CARRY INTO RESULT DJNZ MIRROR1 ; DO ALL 8 BITS RET - #ENDIF #ENDIF ; ; LOOKUP TABLE TO MIRROR BITS IN A BYTE