JOB $a6: SP_WRITE C700: 20 A6 CF JSR $CFA6 Blockheader lesen C703: A5 88 LDA $88 Solltrack C705: C5 1F CMP $1F = aktueller Track ? C707: F0 03 BEQ $C70C ja, ==> C709: 4C 88 CB JMP $CB88 Error $02 (Header nicht gefunden) Einsprung von $C707: C70C: A6 83 LDX $83 Jobnummer holen und als Index in eine C70E: B5 0B LDA $0B,X 2 (!) Byte Tabelle verwenden C710: 8D 01 60 STA $6001 physikalische T&S des Sektors holen C713: B5 0C LDA $0C,X [Das funktioniert nur bei Job 0 ! C715: 8D 02 60 STA $6002 Da aber der verwendete Puffer immer $0300 C718: A9 00 LDA #$00 ist, besteht kein Grund, einen anderen C71A: 85 4A STA $4A Jobpuffer zu verwenden.] C71C: A9 03 LDA #$03 Zeiger auf Pufferanfang ($0300) setzen C71E: 85 4B STA $4B C720: EA .... NOP [19 NOPS] C732: .... EA NOP C733: AD E0 01 LDA $01E0 Controller-Befehl 'Write Sector' C736: 20 F4 CB JSR $CBF4 an Controller uebergeben C739: A4 91 LDY $91 Blockgroesse holen C73B: C0 03 CPY #$03 Anzahl der zu schreibenden Seiten berechnen C73D: D0 02 BNE $C741 C73F: C8 INY 128-Byte-Sektoren werden nicht C740: EA NOP unterstuetzt) Einsprung von $C73D, $C749, $C758, $C75D: C741: AD 00 60 LDA $6000 Controller-Status holen C744: 29 03 AND #$03 C746: 4A LSR C747: 90 16 BCC $C75F 'Controller ready', ==> C749: F0 F6 BEQ $C741 noch nicht 'Byte ready', ==> C74B: 84 82 STY $82 C74D: A0 00 LDY #$00 C74F: B1 4A LDA ($4A),Y Byte auf Diskette schreiben C751: 8D 03 60 STA $6003 C754: A4 82 LDY $82 C756: E6 4A INC $4A Pufferzeiger erhoehen C758: D0 E7 BNE $C741 C75A: E6 4B INC $4B C75C: 88 DEY noch eine Speicherseite zu schreiben ? C75D: D0 E2 BNE $C741 ja, ==> Einsprung von $C747: C75F: 20 3F CD JSR $CD3F Controller-Status pruefen C762: 4C CC CD JMP $CDCC Jobauftrag beenden C765: FF .... C7FF: .... FF Controller-Programm 2 Previous Page / Next Page |