PGM DKMAKIPL REL * * SHOULD BE LOADED AT ABSOLUTE LOCATION #4000 * * Writes image in form: 13*128 blocks starting record 1 track 7 * memory address 0 * then 39 blocks and 1 track starting address #D280 * BASE EQU #78 BASE ADDRESS OF CHANNEL * * START MOV AX,!#000 MOV SS,AX MOV DS,AX MOV ES,AX MOV SP,!#4F0 CALL RESET XOR CX,CX MOV BL,!0 UNIT 0 CALL RECAL RECALIBRATE DRIVE CALL WAITC OR AL,AL JE GF2 INT ERROR GF2 MOV IONR,!13[B] MOV DX,!0 memory address MOV CX,!#0701 record 1 track 7 CALL MAKIPL * next 39 records MOV IONR,!39[B] MOV DX,!#D280 MOV CX,!#070E record 14 track 7 CALL MAKIPL * now 1 track MOV IONR,!52[B] do whole track in one go MOV CL,!1 record 1 MOV CH,!8 track 8 MOV DX,!128*39+#D280 * CALL MAKIPL * finished INT * * IOPB DB #T00000000 SEQ. FORMAT, EN INTS, WORD LENGTH 8 IODI DB 0 DISKETTE INSTRUCTION IONR DB 52 NO. OF RECORDS IOTA DB 0 TRACK ADDRESS IOSA DB 0 SECTOR ADDRESS IOLBA DB 0 LOWER BUFF. ADD. IOUBA DB 0 UPPER BUFF. ADD. * * RECALIBRATE * RECAL MOV AL,!RECALIN BL SHOULD HOLD UNIT NO. XOR DX,DX MOV CX,!1 TRACK ADDRESS 0, SECTOR ADD. 1 CALL DISKINS RET * * GENERAL DISK INSTRUCTION * BL UNIT NO. * AL INSTRUCTION * CH TRACK ADDRESS * CL SECTOR ADDRESS * DH UPPER BUFFER ADDRESS * DL LOWER BUFFER ADDRESS * DISKINS MOV IOTA,CH MOV IOSA,CL OR AL,!#T0000 8 BIT WORDS MOV CL,!4 SHL BL,CL SHIFT UNIT BITS OR AL,BL OR WITH INST. AND AL,!#3F CLEAR TOP 2 BITS MOV IODI,AL MOV IOLBA,DL MOV IOUBA,DH MOV AX,!IOPB OUT BASE+1 PUSH AX POP AX MOV AL,AH OUT BASE+2 START CHANNEL RET * * MAKIPL * MAKIPL MOV BL,!0 unit number MOV AL,!WRITEIN CALL DISKINS CALL WAITC OR AX,AX JE MAKRET INT ERROR MAKRET RET * * WAITC, WAIT FOR CHANNEL END , LOOK AT RESULT * WAITC IN BASE+0 TEST AL,!INTPEND JE WAITC BUSY WAIT PUSH AX POP AX IN BASE+1 0 IF ERROR MOV AH,AL PUSH AX POP AX IN BASE+3 RESULT BYTE RET * * RESET CHANNEL * RESET OUT BASE+7 RET * * * RECALIN EQU 3 FORMIN EQU 2 READIN EQU 4 WRITEIN EQU 6 INTPEND EQU 4 * FCH EQU $ * END