]> cloudbase.mooo.com Git - avrcpm.git/blobdiff - cpm/BIOS.MAC
* cpm/BIOS.MAC
[avrcpm.git] / cpm / BIOS.MAC
index c477f56eacedd855311ada04c78c27c3feea272c..e7417d88f38e73f439b1cfac57bdd1323614796a 100644 (file)
 \r
        maclib  CFGACPM.LIB\r
 \r
+cr     equ     0dh\r
+lf     equ     0ah\r
+\r
        aseg\r
        org     100h\r
        .phase  bios\r
        .z80\r
 \r
-nsects         equ     ($-ccp)/128     ;warm start sector count\r
+nsects equ     ($-ccp)/128     ;warm start sector count\r
        \r
-       jp boot\r
+       jp      boot\r
 wboote:        \r
-       jp wboot\r
-       jp const\r
-       jp conin\r
-       jp conout\r
-       jp list\r
-       jp punch\r
-       jp reader\r
-       jp home\r
-       jp seldsk\r
-       jp settrk\r
-       jp setsec\r
-       jp setdma\r
-       jp read\r
-       jp write\r
-       jp listst\r
-       jp sectran\r
+       jp      wboot\r
+       jp      const\r
+       jp      conin\r
+       jp      conout\r
+       jp      list\r
+       jp      punch\r
+       jp      reader\r
+       jp      home\r
+       jp      seldsk\r
+       jp      settrk\r
+       jp      setsec\r
+       jp      setdma\r
+       jp      read\r
+       jp      write\r
+       jp      listst\r
+       jp      sectran\r
+       jp      0               ;zsdos (?)\r
+       jp      0               ;zsdos (?)\r
+       jp      0               ;zsdos (?)\r
+       jp      clock           ;zsdos compatible clock set/get\r
+\r
 \r
        .8080\r
        maclib AVRCPM.LIB\r
        \r
        ;Drive   A    B    C    D    E F G H I    J    K    L\r
-;drvtbl: dtbl  <dpha,dphb,dphc,dphd, , , , ,dphi,dphj,dphk,dphl>\r
-;drvtbl:       dtbl    <dpha,    ,    ,    , , , , ,dphi,dphj,dphk,dphl>\r
-drvtbl:        dtbl    <    ,    ,    ,    , , , , ,dphi,dphj,dphk,dphl>\r
+;drvtbl:dtbl   <dpha,dphb,dphc,dphd, , , , ,dphi,dphj,dphk,dphl>\r
+;drvtbl:dtbl   <dpha,    ,    ,    , , , , ,dphi,dphj,dphk,dphl>\r
+;drvtbl: dtbl  <    ,    ,    ,    , , , , ,dphi,dphj,dphk,dphl>\r
+drvtbl:dtbl    <    ,    ,    ,    , , , , ,dphi>\r
 \r
        ;       Name   spt   bls  dks  dir  cks off\r
 ;      dpb     dpb243, 26, 1024, 243,  64,  64,  2\r
 ;      dpb     dp8192s,32, 4096,2046, 512, 512,  2\r
 ;      dpb     dp8192, 32, 4096,2046,1024,1024,  2\r
 ;      dpb     dpbrd,  32, 1024,  56,  32,   0,  2\r
-       dpb     rd1016, 32, 2048, 508, 192,   0,  2\r
-       dpb     rd1024, 32, 2048, 512, 192,   0,  0\r
-       dpb     rd0960, 32, 2048, 480, 192,   0,  0\r
+       dpb     rd192,  32, 1024, 192,  32,   0,  0\r
+;      dpb     rd1016, 32, 2048, 508, 192,   0,  2\r
+;      dpb     rd1024, 32, 2048, 512, 192,   0,  0\r
+;      dpb     rd0960, 32, 2048, 480, 192,   0,  0\r
 \r
 ;dpha: dph     dpb243\r
 ;dphb: dph     dpb243\r
@@ -70,10 +80,11 @@ drvtbl:     dtbl    <    ,    ,    ,    , , , , ,dphi,dphj,dphk,dphl>
 ;dphb: dph     dp8192s\r
 ;dphc: dph     dp8192\r
 ;dphd: dph     dp8192\r
-dphi:  dph     rd1016\r
-dphj:  dph     rd1024\r
-dphk:  dph     rd1024\r
-dphl:  dph     rd0960\r
+;dphi: dph     rd1016\r
+dphi:  dph     rd192\r
+;dphj: dph     rd1024\r
+;dphk: dph     rd1024\r
+;dphl: dph     rd0960\r
 \r
        .z80\r
        \r
@@ -89,34 +100,37 @@ msgnodisk:
        db      cr,lf,0\r
 \r
 const:\r
-       in a,(0)\r
+       in      a,(UARTCSR)\r
+       and     UARTRXRDY\r
+       ret     z\r
+       or      0ffh\r
        ret\r
 \r
 conin:\r
-       in a,(0)\r
-       cp 0ffh\r
-       jp nz,conin\r
+       in      a,(UARTCSR)\r
+       rra\r
+       jp      nc,conin\r
 \r
-       in a,(1)\r
+       in      a,(UARTDR)\r
        ret\r
 \r
 conout:\r
-       ld a,c\r
-       out (1),a\r
+       ld      a,c\r
+       out     (UARTDR),a\r
        ret\r
 \r
 list:\r
        ret\r
 \r
 listst:\r
-       ld a,0\r
+       ld      a,0\r
        ret\r
 \r
 punch:\r
        ret\r
 \r
 reader:\r
-       ld a,01Fh\r
+       ld      a,01Fh\r
        ret\r
 \r
 prmsg:\r
@@ -253,6 +267,7 @@ wboot:      ;re-load CP/M
        out     (22),a\r
        ld      a,(bootdsk)\r
        ld      c,a\r
+       ld      e,0             ;clear reselection flag\r
        call    seldsk\r
        call    home\r
        ld      b,nsects\r
@@ -349,58 +364,115 @@ getdph:
        \r
 \r
 home:\r
-       ld a,1 shl HOME_FUNC\r
-       out (22),a\r
+       ld      a,1 shl HOME_FUNC\r
+       out     (22),a\r
        \r
-       ld bc,0                 ; same as seek to track 0\r
+       ld      bc,0            ; same as seek to track 0\r
 settrk:\r
-       ld a,c\r
-       out (16),a\r
-       ld a,b\r
-       out (17),a\r
+       ld      a,c\r
+       out     (16),a\r
+       ld      a,b\r
+       out     (17),a\r
        ret\r
 \r
 setsec:\r
-       ld a,c\r
-       out (18),a\r
+       ld      a,c\r
+       out     (18),a\r
        ret\r
 \r
 setdma:\r
-       ld a,c\r
-       out (20),a\r
-       ld a,b\r
-       out (21),a\r
+       ld      a,c\r
+       out     (20),a\r
+       ld      a,b\r
+       out     (21),a\r
        ret\r
 \r
 read:\r
-       ld a,1 shl READ_FUNC\r
-       out (22),a\r
-       in a,(22)\r
-       and 1\r
+       ld      a,1 shl READ_FUNC\r
+       out     (22),a\r
+       in      a,(22)\r
+       and     1\r
        ret\r
 \r
 write:\r
        ld      a,c\r
-       and     3               ;mask write  type\r
+       and     3               ;mask write type\r
        or      1 shl WRITE_FUNC\r
        out     (22),a\r
-       in a,(22)\r
-       and 1\r
+       in      a,(22)\r
+       and     1\r
        ret\r
 \r
 sectran:\r
        ;translate sector bc using table at de, res into hl\r
-       ld h,b\r
-       ld l,c\r
-       ld a,d\r
-       or e\r
-       ret z\r
-       ex de,hl\r
-       add hl,bc\r
-       ld l,(hl)\r
-       ld h,0\r
+       ld      h,b\r
+       ld      l,c\r
+       ld      a,d\r
+       or      e\r
+       ret     z\r
+       ex      de,hl\r
+       add     hl,bc\r
+       ld      l,(hl)\r
+       ld      h,0\r
        ret\r
 \r
+;------------------------------------------------------------------------\r
+; ZSDOS clock drivers may use registers BC and D without restoring  them, \r
+; but must preserve the Z80's alternate and index registers.  \r
+; Other registers must be used exactly as follows:\r
+;\r
+;   Enter:     C = 00H to Read the Clock, 01H to Set the Clock\r
+;             DE = Address of a 6-byte field to Receive or from which \r
+;                  to Set time in DateStamper format (BCD digits as: \r
+;                  YY MM DD HH MM SS).  24-hour operation is assumed.\r
+;\r
+;   Exit :     A = 01H for a successful operation,\r
+;                  0FFH for a failure of any sort (Can't set, etc.)\r
+;\r
+;            When Reading the Clock:\r
+;              E = Original contents of Entry value of DE plus 5\r
+;             HL = Entry value of DE plus 5 (Seconds field)\r
+\r
+clock:\r
+       dec     c\r
+       jr      z,clk_set\r
+       inc     c\r
+       ret     nz\r
+\r
+clk_get:\r
+       ld      hl,5\r
+       add     hl,de\r
+       push    hl\r
+       ld      bc,6*256 + CLOCKPORT-1\r
+       ld      e,(hl)\r
+clk_gl:\r
+       inc     c\r
+       ind\r
+       jr      nz,clk_gl\r
+       pop     hl\r
+       jr      clk_e\r
+\r
+\r
+clk_set:\r
+       ld      a,(hl)\r
+       cp      78h\r
+       ld      a,19h\r
+       jr      nc,clk_s1\r
+       ld      a,20h\r
+clk_s1:\r
+       out     (CLOCKPORT+6),a\r
+       ld      bc,6*256 + CLOCKPORT+6\r
+clk_sl:\r
+       dec     c\r
+       outi\r
+       jr      nz,clk_sl\r
+       dec     hl\r
+clk_e:\r
+       ld      a,1\r
+       ret\r
+\r
+;------------------------------------------------------------------------\r
+\r
 bcb:   dw      drvtbl\r
        dw      dirbuf\r
        dw      enddat\r