Subttl -Firmware Hi-Rom Code for Hard Disk (15_Aug_84) ; ; Copyright 1983, 1984 ; Morrow Designs, Inc. ; San Leandro, Ca. ; Michael Stolowitz, John Zalabak ; .z80 ; switch set to assemble z80 nemonics Include HD22DEF.MAC ; Include the global definitions ASeg Org O_HiRm ;See the hd*def.mac module for definition ;This section must be at the very end of rom ;---------------------------------------------------------------------- ; Linkage Definitions ;-------------------- ; public hirom ;Declare the start of the Hi-Rom code ;In the main module external Hdone ;Page-0 [ jp (IY) ] return to calling routine page 64 ;---------------------------------------------------------------------- ; Start of the Read-Data Area (15_Aug_84) ;---------------------------------------- ; .phase Dskbuf - 800h ;Read-Data Block 0 hirom: jp 0C028h nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop Š nop nop nop .dephase .phase dskbuf ;Read-data block 2 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop dec c jp z,postbuf nop nop .dephase .phase prebuf ;read-data block 1 ei ;Enable Interrupts scf jp (hl) ;Hang Until a Sync Field has been found nop or a ;Clear Carry to indicate that ID has been found nop nop nop nop ld hl,prebuf+0Dh jp (hl) jp (ix) nop nop Š nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .dephase .phase postbuf ;read-data block 3 nop nop jp Hdone nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .dephase page ;---------------------------------------------------------------------- ; Start of write command (14_Oct_83) ;----------------------------------- ; Š .phase Dskbuf - 800h ;Write-Data Block 0 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .dephase .phase dskbuf ;write-data block 2 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop Š nop nop nop nop nop nop nop nop nop nop dec c jp z,postbuf nop .dephase .phase prebuf ;write-data block 1 ei ;Enable Interrupts scf jp (hl) ;Hang Until Read Sync has been attained nop or a ;Clear Carry to indicate that ID has been found nop nop nop jp prebuf+17h nop nop nop nop nop nop nop nop nop nop nop nop ld d,3 dec d jp nz,prebuf+19h nop nop nop .dephase .phase postbuf ;write-data block 3 nop nop nop jp Hdone nop nop nop nop Š nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .dephase page ;---------------------------------------------------------------------- ; Start of read headers command (14_Oct_83) ;------------------------------------------ ; .phase Dskbuf - 800h ;Read Headers Block 0 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop Š nop nop nop nop nop nop nop nop .dephase .phase dskbuf ;read-headers block 2 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .dephase .phase prebuf ;read-headers block 1 ei ;Enable Interrupts scf jp (hl) ;Hang until Sync has been attained nop or a ;Clear Carry to indicate that ID has been found nop nop nop Š nop jp Hdone nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .dephase .phase postbuf ;read-headers block 3 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop Š nop nop nop nop .dephase page ;---------------------------------------------------------------------- ; Start of format command (25_Oct_83) ;------------------------------------ ; .phase Dskbuf - 800h ;Format Block 0 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .dephase .phase dskbuf ;Format Block 2 db HIGH prebuf ;Hi byte of jump at the end of block 1 nop ld e,l ld d,5 dec d jp nz,dskbuf+5 dec e jp z,dskbuf+13h Š nop nop nop jp dskbuf+3 nop nop nop nop nop jp postbuf+10h nop nop nop nop nop .dephase .phase prebuf ;Format Block 1 nop nop nop nop nop nop halt ;Wait for the next interrupt ld d,6 ;Gap_1_size/6 dec d jp nz,prebuf+9 ld d,2 dec d nop jp nz,prebuf+0Fh nop nop nop ld b,2ch ;B:= page address of sector table ld a,(bc) ;A:= current sector (C already set as offset) ld d,3 dec d nop db 0C2h ;This is a jump instruction (jp nz,prebuf+1Ch) db 0FCh ;High byte of argument is at start of block 2 .dephase .phase postbuf ;Format Block 3 nop nop nop nop nop nop nop nop nop nop nop Š nop nop nop nop nop ld d,h dec d dec d jp nz,postbuf+12h dec c jp nz,prebuf+0dh ld b,1 halt nop nop nop .dephase end