From: Leo C Date: Thu, 21 May 2015 15:35:52 +0000 (+0200) Subject: disable mulit sector i/0 because it triggers a bug X-Git-Tag: hexrel-6 X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp-cpm3.git/commitdiff_plain/b27f7b99726643dca7d91847d45c692e26f5287d?ds=inline disable mulit sector i/0 because it triggers a bug --- diff --git a/cbios/bioskrnl.180 b/cbios/bioskrnl.180 index 93d556d..6ac3726 100644 --- a/cbios/bioskrnl.180 +++ b/cbios/bioskrnl.180 @@ -26,10 +26,10 @@ bell equ 7 ctlQ equ 'Q'-'@' ctlS equ 'S'-'@' -ccp equ 0100h ; Console Command Processor gets loaded - ; into the TPA +ccp equ 0100h ; Console Command Processor gets loaded + ; into the TPA - cseg ; GENCPM puts CSEG stuff in common memory + cseg ; GENCPM puts CSEG stuff in common memory ; variables in system data page @@ -40,7 +40,7 @@ ccp equ 0100h ; Console Command Processor gets loaded ; initialization - extrn hwinit,?init ; general initialization and signon + extrn hwinit,?init ; general initialization and signon extrn ?ldccp,?rlccp ; load & reload CCP for BOOT & WBOOT ; user defined character I/O routines @@ -57,13 +57,13 @@ ccp equ 0100h ; Console Command Processor gets loaded ; memory control - public @cbnk ; current bank - extrn ?xmove,?move ; select move bank, and block move - extrn ?bank ; select CPU bank + public @cbnk ; current bank + extrn ?xmove,?move ; select move bank, and block move + extrn ?bank ; select CPU bank ; clock support - extrn ?time ; signal time operation + extrn ?time ; signal time operation ; general utility routines @@ -72,7 +72,7 @@ ccp equ 0100h ; Console Command Processor gets loaded public pmsg.in ; print message inline public phex4,phex2 ; print 4 digit hex (HL), or 2 digit hex (A) - include modebaud.inc ; define mode bits + include modebaud.inc ; define mode bits ; External names for BIOS entry points @@ -88,45 +88,45 @@ ccp equ 0100h ; Console Command Processor gets loaded ; BIOS Jump vector. - ; All BIOS routines are invoked by calling these - ; entry points. - -?boot: jp boot ; initial entry on cold start -?wboot: jp wboot ; reentry on program exit, warm start - -?const: jp const ; return console input status -?conin: jp conin ; return console input character -?cono: jp conout ; send console output character -?list: jp list ; send list output character -?auxo: jp auxout ; send auxiliary output character -?auxi: jp auxin ; return auxiliary input character - -?home: jp home ; set disks to logical home -?sldsk: jp seldsk ; select disk drive, return disk parameter info -?sttrk: jp settrk ; set disk track -?stsec: jp setsec ; set disk sector -?stdma: jp setdma ; set disk I/O memory address -?read: jp read ; read physical block(s) -?write: jp write ; write physical block(s) - -?lists: jp listst ; return list device status -?sctrn: jp sectrn ; translate logical to physical sector - -?conos: jp conost ; return console output status -?auxis: jp auxist ; return aux input status -?auxos: jp auxost ; return aux output status -?dvtbl: jp devtbl ; return address of device def table -?devin: jp ?cinit ; change baud rate of device - -?drtbl: jp getdrv ; return address of disk drive table -?mltio: jp multio ; set multiple record count for disk I/O -?flush: jp flush ; flush BIOS maintained disk caching - -?mov: jp ?move ; block move memory to memory -?tim: jp ?time ; Signal Time and Date operation -?bnksl: jp bnksel ; select bank for code execution and default DMA -?stbnk: jp setbnk ; select different bank for disk I/O DMA operations -?xmov: jp ?xmove ; set source and destination banks for one operation + ; All BIOS routines are invoked by calling these + ; entry points. + +?boot: jp boot ; initial entry on cold start +?wboot: jp wboot ; reentry on program exit, warm start + +?const: jp const ; return console input status +?conin: jp conin ; return console input character +?cono: jp conout ; send console output character +?list: jp list ; send list output character +?auxo: jp auxout ; send auxiliary output character +?auxi: jp auxin ; return auxiliary input character + +?home: jp home ; set disks to logical home +?sldsk: jp seldsk ; select disk drive, return disk parameter info +?sttrk: jp settrk ; set disk track +?stsec: jp setsec ; set disk sector +?stdma: jp setdma ; set disk I/O memory address +?read: jp read ; read physical block(s) +?write: jp write ; write physical block(s) + +?lists: jp listst ; return list device status +?sctrn: jp sectrn ; translate logical to physical sector + +?conos: jp conost ; return console output status +?auxis: jp auxist ; return aux input status +?auxos: jp auxost ; return aux output status +?dvtbl: jp devtbl ; return address of device def table +?devin: jp ?cinit ; change baud rate of device + +?drtbl: jp getdrv ; return address of disk drive table +?mltio: jp multio ; set multiple record count for disk I/O +?flush: jp flush ; flush BIOS maintained disk caching + +?mov: jp ?move ; block move memory to memory +?tim: jp ?time ; Signal Time and Date operation +?bnksl: jp bnksel ; select bank for code execution and default DMA +?stbnk: jp setbnk ; select different bank for disk I/O DMA operations +?xmov: jp ?xmove ; set source and destination banks for one operation jp 0 ; reserved for future expansion jp 0 ; reserved for future expansion @@ -136,14 +136,14 @@ ccp equ 0100h ; Console Command Processor gets loaded ; BOOT ; Initial entry point for system startup. - dseg ; this part can be banked + dseg ; this part can be banked boot: ld sp,bs$stack - call hwinit ; first time hardware initialisation + call hwinit ; first time hardware initialisation - ld c,15 ; initialize all 16 character devices + ld c,15 ; initialize all 16 character devices c$init$loop: push bc call ?cinit @@ -151,54 +151,54 @@ c$init$loop: dec c jp p,c$init$loop - call ?init ; perform any additional system initialization - ; and print signon message + call ?init ; perform any additional system initialization + ; and print signon message ld bc,16*256+0 - ld hl,@dtbl ; init all 16 logical disk drives + ld hl,@dtbl ; init all 16 logical disk drives d$init$loop: - push bc ; save remaining count and abs drive + push bc ; save remaining count and abs drive ld e,(hl) inc hl ld d,(hl) - inc hl ; grab @drv entry + inc hl ; grab @drv entry ld a,e or d - jr z,d$init$next ; if null, no drive - push hl ; save @drv pointer + jr z,d$init$next ; if null, no drive + push hl ; save @drv pointer if 0 - ex de,hl ; XDPH address in + ex de,hl ; XDPH address in dec hl dec hl - ld b,(hl) ; get relative drive code - ld (@ADRV),bc ; save absolute and relative drive code - dec hl ; point to init pointer + ld b,(hl) ; get relative drive code + ld (@ADRV),bc ; save absolute and relative drive code + dec hl ; point to init pointer ld d,(hl) dec hl - ld e,(hl) ; get init pointer + ld e,(hl) ; get init pointer ex de,hl - call ipchl ; call init routine + call ipchl ; call init routine else push de pop ix ld b,(ix-2) - ld (@ADRV),bc ; save absolute and relative drive code + ld (@ADRV),bc ; save absolute and relative drive code ld l,(ix-4) - ld h,(ix-3) ; get init pointer - call ipchl ; call init routine + ld h,(ix-3) ; get init pointer + call ipchl ; call init routine endif - pop hl ; recover @drv pointer + pop hl ; recover @drv pointer d$init$next: - pop bc ; recover counter and drive # + pop bc ; recover counter and drive # inc c - djnz d$init$loop ; and loop for each drive + djnz d$init$loop ; and loop for each drive jp boot$1 cseg ; following in resident memory boot$1: call set$jumps - call ?ldccp ; fetch CCP for first time + call ?ldccp ; fetch CCP for first time jp ccp @@ -207,9 +207,9 @@ boot$1: wboot: ld sp,bs$stack - call set$jumps ; initialize page zero - call ?rlccp ; reload CCP - jp ccp ; then reset jmp vectors and exit to ccp + call set$jumps ; initialize page zero + call ?rlccp ; reload CCP + jp ccp ; then reset jmp vectors and exit to ccp set$jumps: @@ -288,14 +288,14 @@ not$out$ready: or a jp z,not$out$ready pop bc - push bc ; restore and resave the character and device - call ?co ; if device selected, print it + push bc ; restore and resave the character and device + call ?co ; if device selected, print it pop bc ; recover count and character pop hl ; recover the rest of the vector not$out$device: inc b ; next device number ld a,h - or l ; see if any devices left + or l ; see if any devices left jr nz,co$next ; and go find them... ret @@ -334,7 +334,7 @@ cos$next: add hl,hl ; check next bit push hl ; save the vector push bc ; save the count - ld a,0FFh ; assume device ready + ld a,0FFh ; assume device ready call c,coster ; check status for this device pop bc ; recover count pop hl ; recover bit vector @@ -342,30 +342,31 @@ cos$next: ret z ; if any not ready, return false inc b ; drop device number ld a,h - or l ; see if any more selected devices + or l ; see if any more selected devices jr nz,cos$next - or 0FFh ; all selected were ready, return true + or 0FFh ; all selected were ready, return true ret -coster: ; check for output device ready, including optional - ; xon/xoff support + ; check for output device ready, including optional + ; xon/xoff support +coster: ld l,b - ld h,0 ; make device code 16 bits - push hl ; save it in stack + ld h,0 ; make device code 16 bits + push hl ; save it in stack add hl,hl add hl,hl - add hl,hl ; create offset into device characteristics tbl + add hl,hl ; create offset into device characteristics tbl ld de,@ctbl+6 - add hl,de ; make address of mode byte + add hl,de ; make address of mode byte ld a,(hl) and mb$xon$xoff - pop hl ; recover console number in + pop hl ; recover console number in jp z,?cost ; not a xon device, go get output status direct ld de,xofflist - add hl,de ; make pointer to proper xon/xoff flag + add hl,de ; make pointer to proper xon/xoff flag call cist1 ; see if this keyboard has character ld a,(hl) - call nz,ci1 ; get flag or read key if any + call nz,ci1 ; get flag or read key if any cp ctlq jr nz,not$q ; if its a ctl-Q, ld a,0FFh ; set the flag ready @@ -374,12 +375,12 @@ not$q: jr nz,not$s ; if its a ctl-S, ld a,00h ; clear the flag not$s: - ld (hl),a ; save the flag + ld (hl),a ; save the flag call cost1 ; get the actual output status, - and (hl) ; and mask with ctl-Q/ctl-S flag + and (hl) ; and mask with ctl-Q/ctl-S flag ret ; return this as the status -cist1: ; get input status with and saved +cist1: ; get input status with and saved push bc push hl call ?cist @@ -388,7 +389,7 @@ cist1: ; get input status with and saved or a ret -cost1: ; get output status, saving & +cost1: ; get output status, saving & push bc push hl call ?cost @@ -397,7 +398,7 @@ cost1: ; get output status, saving & or a ret -ci1: ; get input, saving & +ci1: ; get input, saving & push bc push hl call ?ci @@ -434,7 +435,7 @@ cis$next: ret nz ; if any ready, return true inc b ; next device number ld a,h - or l ; see if any more selected devices + or l ; see if any more selected devices jr nz,cis$next xor a ; all selected were not ready, return false ret @@ -602,19 +603,19 @@ table10: ?pderr: ld hl,drive$msg - call ?pmsg ; error header + call ?pmsg ; error header ld a,(@adrv) add a,'A' ld c,a - call ?cono ; drive code + call ?cono ; drive code ld hl,track$msg - call ?pmsg ; track header + call ?pmsg ; track header ld hl,(@trk) - call ?pdec ; track number + call ?pdec ; track number ld hl,sector$msg - call ?pmsg ; sector header + call ?pmsg ; sector header ld hl,(@sect) - call ?pdec ; sector number + call ?pdec ; sector number ret @@ -622,9 +623,9 @@ table10: ; Bank Select. Select CPU bank for further execution. bnksel: - ld (@cbnk),a ; remember current bank - jp ?bank ; and go exit through users - ; physical bank select routine + ld (@cbnk),a ; remember current bank + jp ?bank ; and go exit through users + ; physical bank select routine xofflist: @@ -648,34 +649,34 @@ xofflist: ; in seldsk: - ld a,c ; save drive select code + ld a,c ; save drive select code ld (@adrv),a - ld b,0 ; create index from drive code + ld b,0 ; create index from drive code ld hl,@dtbl - add hl,bc ; get pointer to dispatch table + add hl,bc ; get pointer to dispatch table add hl,bc ld a,(hl) inc hl ld h,(hl) - ld l,a ; point at disk descriptor - ld (@xdph),hl ; save descriptor pointer + ld l,a ; point at disk descriptor + ld (@xdph),hl ; save descriptor pointer or h - ret z ; if no entry in table, no disk + ret z ; if no entry in table, no disk - ld a,e ; examine login bit + ld a,e ; examine login bit and 1 ret nz push ix ld ix,(@xdph) ld a,(ix-2) - ld (@RDRV),a ; get relative drive - ld l,(ix-6) ; get address of LOGIN routine + ld (@RDRV),a ; get relative drive + ld l,(ix-6) ; get address of LOGIN routine ld h,(ix-5) ex (sp),ix pop de - call ipchl ; call LOGIN - ld hl,(@xdph) ; recover DPH pointer + call ipchl ; call LOGIN + ld hl,(@xdph) ; recover DPH pointer ret @@ -751,8 +752,8 @@ sectrn: ; extended disk parameter header (XDPH). read: - ld ix,(@xdph) ; get drive descriptor pointer - ld l,(ix-8) ; get read routine entry + ld ix,(@xdph) ; get drive descriptor pointer + ld l,(ix-8) ; get read routine entry ld h,(ix-7) jp (hl) @@ -763,8 +764,8 @@ read: ; extended disk parameter header (XDPH). write: - ld ix,(@xdph) ; get drive descriptor pointer - ld l,(ix-10) ; get write routine entry + ld ix,(@xdph) ; get drive descriptor pointer + ld l,(ix-10) ; get write routine entry ld h,(ix- 9) jp (hl) @@ -784,7 +785,7 @@ multio: flush: xor a - ret ; return with no error + ret ; return with no error diff --git a/cbios/gencpm.dat b/cbios/gencpm.dat index 00874a9..3a0c020 100644 --- a/cbios/gencpm.dat +++ b/cbios/gencpm.dat @@ -9,9 +9,9 @@ BNKSWT = Y COMBAS = C0 LERROR = Y NUMSEGS = 03 -MEMSEG00 = 50,32,00 +MEMSEG00 = 50,30,00 MEMSEG01 = 10,B0,02 -MEMSEG02 = 00,C0,03 +MEMSEG02 = 01,BF,03 MEMSEG03 = 00,C0,04 MEMSEG04 = 00,C0,05 MEMSEG05 = 00,C0,06 diff --git a/cbios/sdio.180 b/cbios/sdio.180 index 2c4823d..78a8579 100644 --- a/cbios/sdio.180 +++ b/cbios/sdio.180 @@ -173,26 +173,27 @@ sd$write: ld de,write$msg ; point at " Write " ld c,2 rw$common: - ld hl,residual ; remainng sectors from last multi io? - ld a,(hl) - sub a,1 - jr c,rwc_new_sectors - ld (hl),a - xor a - ret +; ld hl,residual ; remainng sectors from last multi io? +; ld a,(hl) +; sub a,1 +; jr c,rwc_new_sectors +; +; ld (hl),a +; xor a +; ret rwc_new_sectors: ld b,1 ; assume 1 sector to transfer - ld a,(@cnt) - or a - jr z,rwc_doit - - ld b,a ; number of sectors to transfer - dec a ; save remaining - ld (hl),a - xor a ; reset multi sector count - ld (@cnt),a +; ld a,(@cnt) +; or a +; jr z,rwc_doit +; +; ld b,a ; number of sectors to transfer +; dec a ; save remaining +; ld (hl),a +; xor a ; reset multi sector count +; ld (@cnt),a ; compute pysical transfer address ; prepare message @@ -208,7 +209,7 @@ rwc_doit: ld hl,@adrv ;address of arguments ld bc,6 ldir - ld (de),a + ld (de),a ;number of sectors inc de push de ld e,(hl) ;dma address