;***********************************************************************; ; ; ; SSS DDDD SSS Y Y SSS TTTTT EEEEE M M SSS ; ; S S D D S S Y Y S S T E MM MM S S ; ; S D D S Y Y S T E M MM M S ; ; SSS D D SSS Y SSS T EEE M M SSS ; ; S D D S Y S T E M M S ; ; S S D D S S Y S S T E M M S S ; ; SSS DDDD SSS Y SSS T EEEEE M M SSS ; ; ; ; ; ; SD SYSTEMS, INC. ; ; 10111 MILLER RD. ; ; DALLAS, TX 75238 ; ; ; ; (214) - 340 - 0303 ; ; ; ; COPYRIGHT (C) 1983 ; ; ; ;***********************************************************************; Title 'Cold booter for CP/M+' ;=======================================================================; ; Rev. Description Initials-Date ; ;-----------------------------------------------------------------------; ; 0.00 Original Version 12/28/82 ; ; ; ;=======================================================================; ; ; fload equ 0f02dh hload equ 0e82dh nsects equ 34h ; always load 8k co equ 0e00ch ; console out vdbchk equ co+2 ckbyte equ 0e6h taddr equ 40h unit equ 42h sctr equ 43h trk equ 44h nrec equ 45h ; ram loc for # of sectors nohds equ 4ah ; for sd-600 nhds equ 2 iob equ 8 iobyt equ 3 bsize equ 1600h ; conproc&bdos size bios equ 0f000h ; floppy bios loc flp2$trk equ 4dh flp3$trk equ 4dh flp6$trk equ 23h flp7$trk equ 50h step1 equ 0bh step2 equ 1bh step3 equ 1fh u2$dsm equ 0052h u3$dsm equ 00a8h u6$dsm equ 00aeh u7$dsm equ 00b0h cpmldr equ 0100h endmod equ cpmldr+80h dev0 equ 8000h dev1 equ 4000h dev2 equ 2000h maclib ports maclib z80 maclib modebaud org 80h cold: lxi sp,80h ! lxi b,80h ! lxi h,cpmldr ; set parms for move lda unit ! mov d,a ! ani 00001100b ; strip type bits mov a,d ! lxi d,hload ! jrnz hard ; if unit # >=4 then ; must be hard disk lxi d,fload ! bit 6,a ; check for 2 density jrz cld2 ; no, set single load point hard: ora a ! dad b ; else add in offset cld2: shld taddr ! mvi a,nsects ! jrz cld1 ; single, then do it mvi a,nsects/2 ; else adjust for 256 byte sect cld1: sta nrec ! lxi h,2 ; start with 2nd sector to read sgl: shld sctr ! shld nohds ! xchg ; update sector and #heads loader: call expchl ! jrnz cold2 ; start up cpmldr dismem: jmpr sw ; go do it expchl: pchl cold2: lxi h,ermsg cold0: mov a,m ! ora a ! jrz cold ; exit if zero mov c,a ! call co ! inx h ! jr cold0 ; print and loop for more cold1: hlt ; halt if boot error ermsg: db 'cold boot error' sw: lxi h,100h ! lxi d,0ff80h ! lxi b,70h ; # of bytes to move up lda vdbchk ! cpi ckbyte ; prom abs value for vdb8024 mvi a,40h ! jrnz ser ; no, then must be serial mvi a,80h ; else, it must be vdb-8024 ser: sta cons+1 ! sta cons+3 ; set both ldir ; move consts to ram location mvi a,2 ! out 7fh ; switch out prom jmp cpmldr+80h ; now, go load the cpm3.sys org cold+080h baud$con equ (baud$9600 shl 4) + baud$9600 cons: dw dev0,dev0,dev1,dev1,dev2 db baud$con and 15,baud$con and 15 db baud$con,baud$con,baud$con,baud$con db flp2$trk,step1,step2,step3 db flp3$trk,step1,step2,step3 db flp6$trk,step1,step2,step3 db flp7$trk,step1,step2,step3 dw u2$dsm,u3$dsm,u6$dsm,u7$dsm,0,0,0,0 db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ; drive locations filler equ cons+80h-$ rept filler db 0 endm end