*************************************************************
*                                                           *
* COLD-BOOT SIGN-ON MESSAGE                                 *
*                                                           *
*************************************************************

PROMPT:
        IF      LDRBIOS
        DB      ACR,ALF,ALF
        DB      'LOADER FOR MORROW DESIGNS DJ2D CONTROLLER.'
        DB      ACR,ALF,0
        ENDIF   ;LDRBIOS
;
        IF      NOT LDRBIOS
        DB      ACR,ALF,ALF
        DB      'CP/M 3.0 (V'           ;CP/M VERSION NUMBER
        DB      CPMREV/10+'0'
        DB      '.'
        DB      (CPMREV MOD 10)+'0'
        DB      '), BIOS REV '
        DB      REVNUM/10+'0','.'       ;REVISION NUMBER
        DB      REVNUM MOD 10+'0'
        DB      ACR,ALF
        DB      'FOR MORROW DESIGNS DJ2D CONTROLLER '
        DB      '@ 0'

        IF      ORIGIN/4096 > 10        ;CONTROLER ORIGIN (HEX)
        DB      ORIGIN/4096+'A'-10
        ELSE
        DB      ORIGIN/4096+'0'
        ENDIF   ;ORIGIN/4096

        IF      (ORIGIN/256 AND 0FH) > 10
        DB      (ORIGIN/256 AND 0FH)+'A'-10
        ELSE
        DB      (ORIGIN/256 AND 0FH)+'0'
        ENDIF   ;ORIGIN/256

        DB      '00H.'
        DB      ACR,ALF,0
        ENDIF   ;NOT LDRBIOS

LOG$MSG:
        DB      13,10,13,10,'CP/M VERSION 3.0',13,10,00

*************************************************************
*                                                           *
* UTILITY ROUTINE TO OUTPUT THE MESSAGE POINTED AT BY H&L,  *
* TERMINATED WITH A NULL. ONLY USED DURING COLD BOOT        *
*                                                           *
*************************************************************

MESSAGE MOV     A,M             ;GET A CHARACTER OF THE 
                                ;  MESSAGE
        INX     H               ;BUMP TEXT POINTER
        ANA     A               ;TEST FOR END
        RZ                      ;RETURN IF DONE
        PUSH    H               ;SAVE POINTER TO TEXT
        MOV     C,A             ;OUTPUT CHARACTER IN C
        CALL    COUT            ;OUTPUT THE CHARACTER
        POP     H               ;RESTORE THE POINTER
        JMP     MESSAGE         ;CONTINUE UNTIL NULL REACHED


*************************************************************
*                                                           *
* COLD BOOT ROUTINES                                        *
*                                                           *
*************************************************************

CBOOT:
        IF LDRBIOS              ;ITIALIZE TERMINAL OR WHATEVER
        CALL    TINIT
        ENDIF   ;LDRBIOS
;
        IF      NOT LDRBIOS
        LXI     SP,TPA          ;SET UP STACK
        ENDIF   ;NOT LDRBIOS
;
        LXI     H,PROMPT        ;PREP FOR SENDING SIGNON MESSAGE
        CALL    MESSAGE         ;SEND THE PROMPT
        XRA     A               ;SELECT DISK A
        STA     CPMDRV
        STA     CDISK
;
        IF      NOT LDRBIOS
        CALL    ?INIT           ;INITIALIZE PAGE ZERO AND SCB
        JMP     WBOOT           ;WARM-BOOT
;
;  SYSTEM INITIALIZATION SUBROUTINE
?INIT:  MVI     A,JMP           ;SET JMPS AT ADDRESSES 0 AND 5
        STA     0
        STA     5
        LXI     H,WBOOTE
        SHLD    1
        LHLD    @MXTPA
        SHLD    6
        LXI     H,1             ;INIT SYSTEM CONTROL BLOCK
        SHLD    @CIVEC
        SHLD    @COVEC
        LXI     H,2
        SHLD    @LOVEC
        LXI     H,4
        SHLD    @AIVEC
        SHLD    @AOVEC
        LXI     H,LOG$MSG       ; SIGN-ON MESSAGE ON CONSOLE
        CALL    MESSAGE
        RET

