Commodore CP/M v2.2 for the C64
Z80 Bootstrap Routine
;
; Z80 BOOTSTRAP ROUTINE FOR THE COMMODORE 64
;
; COPYRIGHT (C) 1982
; COMMODORE INTERNATIONAL
;
;
;
; THIS ROUTINE IS LOADED FROM TRACK 1, SECTOR 5
; OF THE COMMODORE 64 CP/M DISK BY A ROUTINE IN
; BIOS65.
;
; THE LOAD ADDRESS IS 0000H (WITH RESPECT TO THE
; Z80 CPU). WHEN THE Z80 IS ENABLED, THIS PROGRAM
; LOADS THE Z80 BIOS AND CCP AND BDOS INTO RAM AND
; JUMPS TO IT.
;
CCP EQU 3400H
;CCP EQU 0000H ;FOR MAKING BOOT0.HEX
;CCP EQU 0100H ;FOR MAKING BOOT1.HEX
NSECTS EQU 1CH
TRACK EQU 0F903H
SECTOR EQU 0F902H
DISKNO EQU 0F904H
IOTYPE EQU 0FCFFH ;IO SETUP BYTE IN BIOS65
KYBDMD EQU CCP+1633H ;CAPS LOCK FLAG
VICRD EQU 0
CMD EQU 0F900H
OFF EQU 01H
MODESW EQU 0CE00H
DATA EQU 0F901H
BUFFER EQU 0F800H
BOOT EQU CCP+1600H
;
ORG 0000H ;Z80 RESET LOCATION
;
NOP ;NOP REQUIRED FOR HARDWARE
LXI D,CCP ;START OF LOAD ADDRESS
MVI A,0
STA DISKNO ;LOAD IN FROM DRIVE A
MVI H,1 ;READ BEGINNING TRK 1, SEC 6
MVI L,6
LOAD1 MOV A,H
STA TRACK
MOV A,L
STA SECTOR
MVI A,VICRD ;SECTOR READ COMMAND
STA CMD
MVI A,OFF
STA MODESW ;TURN OFF SELF
NOP
LDA DATA ;WAS TRANSFER OK?
ORA A
JNZ LOAD1 ;JUMP IF NO
;
; OUTPUT '*' TO SHOW LOADING
;
MVI A,'*'
STA DATA
MVI A,3
STA CMD
MVI A,OFF
STA MODESW
NOP
;
; MOVE SECTOR TO MEMORY
;
LXI B,BUFFER
LOAD2: LDAX B
STAX D
INR C
INR E
JNZ LOAD2
;
; UPDATE POINTERS
;
INR D
INR L
MOV A,L
;
; CHECK FOR END OF TRACK
;
CPI 17
JC LOAD3
INR H
MVI L,0
LOAD3: MOV A,H
;
; DONE IF H POINTS AT TRACK 3
;
CPI 3
JNZ LOAD1
;
LDA IOTYPE ;POKE UPPER/LOWER CASE
ANI 20H
JNZ LOAD4
MVI A,1
STA KYBDMD
;
LOAD4: ;GO TO BOOT PORTION OF BIOS
JMP BOOT