]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/commitdiff
show cpu clock frequency at startup
authorLeo C <erbl259-lmu@yahoo.de>
Fri, 29 May 2015 20:43:22 +0000 (22:43 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Fri, 29 May 2015 20:43:22 +0000 (22:43 +0200)
cbios/bioskrnl.180
cbios/boot.180
cbios/misc.180
cbios/sdio.180

index 6ac3726832294cf0f17e3fa0d08b9f577612bd25..4338ef06de02048dbbf444a3604847c7149a27a5 100644 (file)
@@ -57,22 +57,25 @@ ccp equ     0100h           ; Console Command Processor gets loaded
 \r
     ; memory control\r
 \r
-       public @cbnk            ; current bank\r
-       extrn ?xmove,?move      ; select move bank, and block move\r
-       extrn ?bank             ; select CPU bank\r
+       public @cbnk                    ; current bank\r
+       extrn ?xmove,?move              ; select move bank, and block move\r
+       extrn ?bank                     ; select CPU bank\r
 \r
     ; clock support\r
 \r
-       extrn ?time             ; signal time operation\r
+       extrn ?time                     ; signal time operation\r
 \r
     ; general utility routines\r
 \r
-       public ?pmsg,?pdec      ; print message, print number from 0 to 65535\r
-       public ?pderr           ; print BIOS disk error message header\r
-       public pmsg.in          ; print message inline\r
-       public phex4,phex2      ; print 4 digit hex (HL), or 2 digit hex (A)\r
+       public ?pmsg                    ; print message\r
+       public pr.dec,pr.decl           ; print 16 or 32 bit decimal number\r
+       public ?pderr                   ; print BIOS disk error message header\r
+       public pr.inln,pr.crlf          ; print message inline\r
+       public phex4,phex2              ; print 4 digit hex (HL), or 2 digit hex (A)\r
 \r
-       include modebaud.inc    ; define mode bits\r
+       extrn div32_16                  ; divide 32 bit by 16 bit number\r
+\r
+       include modebaud.inc            ; define mode bits\r
 \r
 \r
     ; External names for BIOS entry points\r
@@ -143,13 +146,13 @@ boot:
 \r
        call    hwinit          ; first time hardware initialisation\r
 \r
-       ld      c,15            ; initialize all 16 character devices\r
+       ld      bc,16*256 + 0   ; initialize all 16 character devices\r
 c$init$loop:\r
        push    bc\r
        call    ?cinit\r
        pop     bc\r
-       dec     c\r
-       jp      p,c$init$loop\r
+       inc     c\r
+       djnz    c$init$loop\r
 \r
        call    ?init           ; perform any additional system initialization\r
                                ; and print signon message\r
@@ -512,7 +515,7 @@ pmsg$exit:
 ; print message inline up to a null\r
 ; saves all registers\r
 \r
-pmsg.in:\r
+pr.inln:\r
        ex      (sp),hl\r
        push    af\r
        call    ?pmsg\r
@@ -520,6 +523,15 @@ pmsg.in:
        ex      (sp),hl\r
        ret\r
 \r
+;-------------------------------------------------------------------------------\r
+; print <CR><LF>\r
+; saves all registers\r
+\r
+pr.crlf:\r
+       call    pr.inln\r
+       db      13,10,0\r
+       ret\r
+\r
 ;-------------------------------------------------------------------------------\r
 ; print hl as a 4 digit hexadecimal number\r
 ; saves all registers\r
@@ -563,44 +575,139 @@ prd_1:
        pop     hl\r
        ret\r
 \r
+\r
+   if 0\r
+\r
 ;-------------------------------------------------------------------------------\r
+; print 16 bit number from HL\r
+;\r
 \r
-?pdec:         ; print binary number 0-65535 from <HL>\r
-       ld      bc,table10\r
-       ld      de,-10000\r
-next:\r
-       ld      a,'0'-1\r
-pdecl:\r
-       push    hl\r
-       inc     a\r
-       add     hl,de\r
-       jp      nc,stoploop\r
+pr.dec:\r
+       ex      de,hl\r
+       ld      hl,0\r
+       ;fall thru\r
+\r
+pr.decl:\r
+       push    ix\r
+       ld      ix,1            ; count chars on stack\r
+       push    bc\r
+       exx\r
+       ex      (sp),hl\r
+;      push    de\r
+;      push    bc\r
+       exx\r
+\r
+       xor     a\r
+       push    af              ; string terminator\r
        inc     sp\r
+prd_divloop:\r
+       ld      bc,10\r
+       call    div32_16        ; get a digit\r
+       ld      a,c\r
+       add     a,'0'           ; make it printable\r
+       push    af\r
        inc     sp\r
-       jp      pdecl\r
-stoploop:\r
-       push    de\r
-       push    bc\r
-       ld      c,a\r
-       call    ?cono\r
-       pop     bc\r
+       inc     ix\r
+\r
+       ld      a,h\r
+       or      l\r
+       or      d\r
+       or      e\r
+       jr      nz,prd_divloop\r
+       exx\r
+       push    hl\r
+       exx\r
+       pop     bc              ;b=filler, c=field width\r
+       inc     c\r
+       push    ix\r
        pop     de\r
-nextdigit:\r
+prd_filloop:\r
+       ld      a,e\r
+       cp      c\r
+       jr      nc,prd_out\r
+       push    bc\r
+       inc     sp\r
+       inc     de\r
+       jr      prd_filloop\r
+prd_out:\r
+       ld      hl,0\r
+       add     hl,sp           ;ptr to beginning of number string (hl==0 here)\r
+       call    ?pmsg\r
+       ex      de,hl\r
+       add     hl,sp\r
+       ld      sp,hl\r
+       exx\r
        pop     hl\r
-       ld      a,(bc)\r
+       exx\r
+       pop     ix\r
+       ret\r
+\r
+   endif\r
+\r
+;-------------------------------------------------------------------------------\r
+; print 16 bit number from HL\r
+;\r
+\r
+pr.dec:\r
+       ex      de,hl\r
+       ld      hl,0\r
+       ;fall thru\r
+\r
+pr.decl:\r
+       push    bc              ;save width and fillchar\r
+       push    bc\r
+       exx\r
+       ex      (sp),hl         ;save hl', get width and fill\r
+       push    de              ;save de'\r
+\r
+       xor     a\r
+       ld      d,a             ;clear counter\r
        ld      e,a\r
-       inc     bc\r
-       ld      a,(bc)\r
-       ld      d,a\r
-       inc     bc\r
+       push    af              ; string terminator\r
+       inc     sp\r
+\r
+prd_divloop:                   ;do\r
+       exx                     ;    (main)\r
+       ld      bc,10           ;\r
+       call    div32_16        ;    get a digit\r
+       ld      a,c             ;\r
+       add     a,'0'           ;    make it printable\r
+       push    af              ;\r
+\r
+       ld      a,h             ;\r
+       or      l               ;\r
+       or      d               ;\r
+       or      e               ;\r
+       exx                     ;    (alt)\r
+       inc     sp              ;\r
+       inc     de              ;\r
+       jr      nz,prd_divloop  ;\r
+\r
+prd_filloop:                   ;h=filler, l=field width\r
        ld      a,e\r
-       or      d\r
-       jp      nz,next\r
+       cp      l\r
+       jr      nc,prd_out\r
+       push    hl\r
+       inc     sp\r
+       inc     de\r
+       jr      prd_filloop\r
+prd_out:\r
+       ld      hl,0\r
+       add     hl,sp           ;ptr to beginning of number string (hl==0 here)\r
+       call    ?pmsg\r
+       ex      de,hl\r
+       add     hl,sp\r
+       ld      sp,hl\r
+       inc     sp              ;remove string terminator\r
+       pop     de\r
+       pop     hl\r
+       exx                     ;(main)\r
+       pop     bc\r
        ret\r
 \r
-table10:\r
-       dw      -1000,-100,-10,-1,0\r
 \r
+;-------------------------------------------------------------------------------\r
+;\r
 ?pderr:\r
        ld      hl,drive$msg\r
        call    ?pmsg           ; error header\r
@@ -610,12 +717,13 @@ table10:
        call    ?cono           ; drive code\r
        ld      hl,track$msg\r
        call    ?pmsg           ; track header\r
+       ld      c,0\r
        ld      hl,(@trk)\r
-       call    ?pdec           ; track number\r
+       call    pr.dec          ; track number\r
        ld      hl,sector$msg\r
        call    ?pmsg           ; sector header\r
        ld      hl,(@sect)\r
-       call    ?pdec           ; sector number\r
+       call    pr.dec          ; sector number\r
        ret\r
 \r
 \r
index fe11486838fb6ca5501f9870d970acc272228255..d908929f0b64529453f549242731951f1ab65347 100644 (file)
@@ -6,7 +6,8 @@
 \r
        public  f_cpu\r
 \r
-       extrn   ?boot,?pmsg,?conin\r
+       extrn   ?boot,?conin\r
+       extrn   pr.inln,pr.crlf,pr.dec,pr.decl\r
        extrn   ioini1l,msginit,mmuinit,intinit,cpu_frq\r
        extrn   @civec,@covec,@aivec,@aovec,@lovec\r
        extrn   @cbnk,?bnksl\r
@@ -57,17 +58,25 @@ hwini_skip:
        ld      (@aovec),hl\r
 \r
 \r
-       call    intinit         ; setup interrupts and vectors\r
+       call    intinit                 ; setup interrupts and vectors\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      'CPU clock [Hz]: ',0\r
+\r
+       ld      de,(f_cpu)\r
+       ld      hl,(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
@@ -75,6 +84,7 @@ hwini_skip:
 \r
 ?ldccp:\r
                                ; First time, load the A:CCP.COM file into TPA\r
+       call    resetdsk\r
        xor     a\r
        ld      (ccp$fcb+15),a  ; zero extent\r
        ld      hl,0\r
@@ -114,8 +124,9 @@ ld$1:
        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
@@ -142,6 +153,10 @@ rl$1:
 \r
        ; CP/M BDOS Function Interfaces\r
 \r
+resetdsk:\r
+       ld      c,13\r
+       jp      bdos            ; reset disk system\r
+\r
 open:\r
        ld      c,15\r
        jp      bdos            ; open file control block\r
@@ -159,11 +174,6 @@ read:
        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
index 796f319d15a50ae96b9714552c87bfdca2e36ace..5d683740d14bf8822dea1368b32a87d2ab48482a 100644 (file)
@@ -31,15 +31,14 @@ add_hla:
        ret
 
 ;--------------------------------------------------------------------
-;      HLDE:   Divident (x)
-;      BC:     Divisor  (y)
+; Divide 32 bit by 16
 ;
-;       divide x/y
-;           x: hl
-;           y: de
-;         return:
-;           x/y: hl
-;           rem: de
+;    HLDE:     Divident (x)
+;    BC:       Divisor  (y)
+;
+;  return:
+;    HLDE:     Quotient
+;    BC:       Reminder
 
        cseg    ; common area
 div32_16:
@@ -60,6 +59,13 @@ div32_16:
        ex      de,hl           ;de = x, hl = r
        exx                     ;high
        ld      a,32            ;count
+;
+; divide x/y
+;     x: hl
+;     y: de
+;   result:
+;     x/y: hl
+;     rem: de
 div_lp:                                ;do
        exx                     ;    low
        ex      de,hl           ;    x
@@ -86,9 +92,8 @@ div_lp:                               ;do
        exx                     ;        high
        adc     hl,bc           ;
 
-div_no_restore:
-
-       dec     a
+div_no_restore:                        ;
+       dec     a               ;
        jr      nz,div_lp       ;while (--count)
 
        ex      de,hl           ; q
index 78a8579699eb2df36148d9f49ad3faefa83ed9bc..b229c8d9bb6cde70489ddc7ea0e79e013abc3988 100644 (file)
@@ -22,8 +22,8 @@
     ; Utility routines in standard BIOS\r
 \r
        extrn ?wboot            ; warm boot vector\r
-       extrn ?pmsg             ; print message @<HL> up to 00, saves <BC> & <DE>\r
-       extrn ?pdec             ; print binary number in <A> from 0 to 99.\r
+       extrn ?pmsg,pr.inln     ; print message @<HL>, print inline message\r
+       extrn pr.crlf           ; print <cr><lf>\r
        extrn ?pderr            ; print BIOS disk error header\r
        extrn ?conin,?cono      ; con in and out\r
        extrn ?const            ; get console status\r
@@ -73,14 +73,14 @@ sd1:        dph 0,dpbsimhd512
        dw      sd$write\r
        dw      sd$read\r
        dw      sd$login\r
-       dw      sd$init0\r
+       dw      sd$init2\r
        db      2,0             ; relative drive zero\r
 sd2:   dph 0,dpbsimhd512\r
 \r
        dw      sd$write\r
        dw      sd$read\r
        dw      sd$login\r
-       dw      sd$init1\r
+       dw      sd$init3\r
        db      3,0             ; relative drive one\r
 sd3:   dph 0,dpbsimhd512\r
 \r
@@ -267,8 +267,8 @@ fatfs_err:
        tst     080h\r
        jr      z,prompt        ; no fatfs error\r
 \r
-       ld      hl,fsmsg\r
-       call    ?pmsg\r
+       call    pr.inln\r
+       db      'FatFs: ',0\r
 \r
        ld      hl,fr$msg0      ; point at first FatFs message\r
        ld      c,fr$msg$count\r
@@ -276,8 +276,9 @@ fatfs_err:
        call    pdecoded\r
 \r
 prompt:\r
-       ld      hl,error$msg\r
-       call    ?pmsg           ; print "<BEL>, Retry (Y/N) ? "\r
+       call    pr.inln\r
+       db      ' Retry (Y/N) ? ',0\r
+\r
        call    u$conin$echo    ; get operator response\r
        cp      'Y'\r
        jr      z,retry         ; Yes, then retry 10 more times\r
@@ -391,7 +392,6 @@ drvmsg3:    db      'Bus Timeout, ',0
 drvmsg_size    equ     $ - drvmsg0\r
 drvmsg_count   equ     3\r
 \r
-fsmsg:         db      'FatFs: ',0\r
 \r
 ; table of pointers to error message strings\r
 \r
@@ -419,8 +419,4 @@ fr$msg20:   db      'short read/write,',0
 fr$msg$size    equ     $ - fr$msg0\r
 fr$msg$count   equ     20\r
 \r
-error$msg:\r
-       db      ' Retry (Y/N) ? ',0\r
-\r
-\r
        end\r