]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/boot.180
New memory map: bank 1 and common are now contiguous
[z180-stamp-cpm3.git] / cbios / boot.180
index 0e36bcda38fe61bcde10d0d9858ccfbd7c936f9c..2a43b75671a8bc0b88ae76a35248fa1646ca5bfa 100644 (file)
@@ -4,8 +4,12 @@
 \r
        public  hwinit,?init,?ldccp,?rlccp\r
 \r
-       extrn   ?boot,?pmsg,?conin\r
-       extrn   ioini1l,msginit,mmuinit,intinit\r
+       public  f_cpu\r
+\r
+       extrn   boot,?conin\r
+       extrn   pr.inln,pr.crlf,pr.dec,pr.decl\r
+       extrn   ioini1l,msginit,mmuinit,intinit,cpu_frq\r
+       extrn   prt0ini,gs_rtc\r
        extrn   @civec,@covec,@aivec,@aovec,@lovec\r
        extrn   @cbnk,?bnksl\r
 \r
        include z180reg.inc\r
 \r
 \r
-bdos   equ     5\r
-\r
 ccpsize        equ     0c80h\r
 \r
+       ; CP/M BDOS Function Interfaces\r
+\r
+resetdsk       equ     13\r
+open           equ     15\r
+read           equ     20\r
+setdma         equ     26\r
+setmulti       equ     44\r
+bdos           equ     5\r
+\r
+\r
         if     banked\r
 tpa$bank equ   1\r
         else\r
@@ -33,16 +45,19 @@ hwinit:
        ld      hl,hwini_tab\r
        call    ioini1l\r
        ld      a,0c3h\r
-       ld      hl,?boot\r
+       ld      hl,boot\r
        ld      (0),a\r
        ld      (1),hl\r
 hwini_skip:\r
-       call    mmuinit         ; setup mmu registers\r
        call    msginit\r
+       call    cpu_frq\r
+       ld      (f_cpu),hl\r
+       ld      (f_cpu+2),de\r
        ret\r
 \r
 ?init:\r
-       ld      hl,0100000000000000b    ; assign console to ASCI1:\r
+;      ld      hl,1000000000000000b    ; assign console to AVRCON:\r
+       ld      hl,0100000000000000b    ; assign console to ASCI0:\r
        ld      (@civec),hl\r
        ld      (@covec),hl\r
        ld      hl,0000000000000000b    ; assign printer to nothing:\r
@@ -52,17 +67,29 @@ hwini_skip:
        ld      (@aovec),hl\r
 \r
 \r
-       call    intinit         ; setup interrupts and vectors\r
+       call    intinit                 ; setup interrupts and vectors\r
+       call    prt0ini                 ; init timer\r
+       ei\r
+       ld      c,2\r
+       call    gs_rtc                  ; get time and date\r
 \r
        xor     a\r
-       ld      (@cbnk),a       ; right now in bank 0\r
+       ld      (@cbnk),a               ; right now in bank 0\r
 \r
-       ld      hl,signon$msg\r
-       call    ?pmsg           ; print signon message\r
+       call    pr.inln                 ; print signon message\r
+       db      13,10,13,10,'CP/M Version 3.0, Z180-Stamp BIOS',13,10,0\r
+\r
+       call    pr.inln\r
+       db      'Estimated CPU clock [Hz]: ',0\r
+\r
+       ld      hl,(f_cpu)\r
+       ld      de,(f_cpu+2)\r
+       call    pr.decl\r
+       call    pr.crlf\r
        ret\r
 \r
 \r
-       cseg                    ; boot loading most be done from resident memory\r
+       cseg                    ; boot loading must be done from resident memory\r
 \r
 ;      This version of the boot loader loads the CCP from a file\r
 ;      called CCP.COM on the system drive (A:).\r
@@ -70,20 +97,26 @@ hwini_skip:
 \r
 ?ldccp:\r
                                ; First time, load the A:CCP.COM file into TPA\r
+       ld      c,resetdsk\r
+       call    bdos\r
        xor     a\r
        ld      (ccp$fcb+15),a  ; zero extent\r
        ld      hl,0\r
        ld      (fcb$nr),hl     ; start at beginning of file\r
        ld      de,ccp$fcb\r
-       call    open            ; open file containing CCP\r
+       ld      c,open          ; open file containing CCP\r
+       call    bdos\r
        inc     a\r
        jp      z,no$ccp        ; error if no file...\r
        ld      de,0100h\r
-       call    setdma          ; start of TPA\r
+       ld      c,setdma                ; start of TPA\r
+       call    bdos\r
        ld      de,128\r
-       call    setmulti        ; allow up to 16k bytes\r
+       ld      c,setmulti      ; allow up to 16k bytes\r
+       call    bdos\r
        ld      de,ccp$fcb\r
-       call    read            ; load the thing\r
+       ld      c,read          ; load the thing\r
+       call    bdos            ; read records\r
                                ; now,\r
                                ;   copy CCP to bank 0 for reloading\r
        ld      hl,0100h\r
@@ -99,18 +132,16 @@ ld$1:
        call    ?bnksl          ; select extra bank\r
        pop     af\r
        ld      (hl),a          ; save the byte\r
-       inc     hl\r
-       dec     bc              ; bump pointer, drop count\r
-       ld      a,b\r
-       or      c               ; test for done\r
-       jp      nz,ld$1\r
+       cpi                     ; bump pointer, drop count\r
+       jp      pe,ld$1\r
        pop     af\r
        call    ?bnksl          ; restore original bank\r
        ret\r
 \r
 no$ccp:                                ; here if we couldn't find the file\r
-       ld      hl,ccp$msg\r
-       call    ?pmsg           ; report this...\r
+       call    pr.inln         ; report this...\r
+       db      13,10,'BIOS Err on A: No CCP.COM file',0\r
+\r
        call    ?conin          ; get a response\r
        jp      ?ldccp          ; and try again\r
 \r
@@ -121,50 +152,23 @@ no$ccp:                           ; here if we couldn't find the file
 rl$1:\r
        ld      a,2\r
        call    ?bnksl          ; select extra bank\r
-       ld      a,(hl)\r
-       push    af              ; get a byte\r
+       ld      a,(hl)          ; get a byte\r
+       ex      af,af'\r
        ld      a,tpa$bank\r
        call    ?bnksl          ; select TPA\r
-       pop     af\r
+       ex      af,af'\r
        ld      (hl),a          ; save the byte\r
-       inc     hl\r
-       dec     bc              ; bump pointer, drop count\r
-       ld      a,b\r
-       or      c               ; test for done\r
-       jp      nz,rl$1\r
+       cpi                     ; bump pointer, drop count\r
+       jp      pe,rl$1\r
        ret\r
 \r
 \r
-       ; CP/M BDOS Function Interfaces\r
-\r
-open:\r
-       ld      c,15\r
-       jp      bdos            ; open file control block\r
-\r
-setdma:\r
-       ld      c,26\r
-       jp      bdos            ; set data transfer address\r
-\r
-setmulti:\r
-       ld      c,44\r
-       jp      bdos            ; set record count\r
-\r
-read:\r
-       ld      c,20\r
-       jp      bdos            ; read records\r
-\r
-\r
-signon$msg:\r
-       db      13,10,13,10,'CP/M Version 3.0, Z180-Stamp BIOS',13,10,0\r
-\r
-ccp$msg:db     13,10,'BIOS Err on A: No CCP.COM file',0\r
-\r
-\r
 ccp$fcb:db     1,'CCP     ','COM',0,0,0,0\r
        ds      16\r
 fcb$nr:        db      0,0,0\r
 \r
 \r
+       dseg\r
 hwini_tab:\r
        db      (hwini0_e-$)/2  ;count\r
        db      rcr,CREFSH      ;configure DRAM refresh\r
@@ -175,5 +179,7 @@ hwini_tab:
 hwini0_e:\r
        db      0               ;stop mark\r
 \r
+       cseg\r
+f_cpu  dw      0,0             ;detected CPU clock frequency [Hz]\r
 \r
        end\r