007
09.04.2023, 08:15 Uhr
Bert
|
Die Tastatur funkt immer nur ganz kurz dazwischen, WIMIRE so ca. alle 30 ms. Das kann man sich mit dem Oszi anschauen, wie häufig an PIOB.0 bis PIOB.3 die Zeilenleitung umgeschaltet wird.
Wenn ich mir die Schaltung so anschaue, werden zwei Kanäle (TO0, TO1) für die Tonhöhe verwendet (ohne Interrupt). Da bleibt immer noch ein Kanal für die Tondauer. Da sollte der PIO-INT nicht ernsthaft stören (das macht er ja bei Spielen auch nicht).
Außerdem glaube ich, das das abgebildete Testprogramm nicht funktionieren kann. Hier mal als kommentierter Quelltext aus dem Disassembly:
Quellcode: | ORG 0200h
RST 20H DB 02H ;PRST7
DB 0CH ; CLS DB ' CTC-Control' DB 0DH DB ' -----------' DB 0DH,0DH,0DH,0DH DB ' (c) by Falk Tschoche' DB 0DH,80H+' '
DI LD A,03H OUT (38H),A OUT (39H),A OUT (3AH),A OUT (3BH),A LD A,02H LD I,A ; Intverktor auf 02xxh LD A,80H ; 1000_0000 OUT (38H),A ; Intverktor CTC = 80h ; 0 = INT-Vektor LD A,0A7H ; 1010_0111 OUT (38H),A ; INT aktiv ; Zeitgeber ; Vorteiler 256 ; Start durch positive Flanke ; Start nach Zeitkonstante ; Zeitkonstante laden ; warten auf Zeitkonstante ; 1 = Kanalsteuerwort XOR A ; 0000_0000 OUT (38H),A ; Zeitkonstante IM 2 EI HALT
RST 38H ; zentraler Fehleransprung -> ?#
DI RST 20H DB 02H ;PRST7 DB 0DH,0DH,0DH DB ' CTC OK !' DB 0DH,0DH,80H+' '
LD A,03H OUT (38H),A RETI
NOP NOP
; CTC-Interruptroutine ; HL und BC sind m.E. undefiniert, A = 0 LD H,(HL) LD (BC),A NOP NOP NOP NOP NOP NOP ; da fehlt außerdem ein Ende, oder?
|
Vielleicht funktioniert ja das abgebildete BASIC-Programm.
Viele Grüße, Bert |