Maschinencode, Assembler, Reverse Engineering, Dis-Assembliert
CPU: Intel 8039
; Titel: Kosmos CP1 Virtual Mnemonics Code
; Dateiname: CP1-v01.adm
; Quelle: Original ab "CP1.bin" EEPROM.
; Autor: Dr.-Ing. Karl Steinbuch, ehem. ord. Professor für, Nachrichtenverarbeitung, an der Universität Karlsruhe (TH).
;
; 2017-11nov-05 - Dis-Assembliert und Kommentiert von Michael Mustun, michael.mustun AT gmail.com
;
; Irgendwo muss sein:
; Ein paar fertige Programme sind schon im ROM integriert (z.B. Selbsttest und Reaktionstest)
; - Selbsttest
; - Reaktionstest
;
;
; 1.5 Das erste Programm - ein Test
; Wir haben den Computer eingeschaltet, mit der
; CLR-Irrtums-Taste haben wir die Anzeige gelöscht.
; Das kleine rote Pünktchen zeigt uns, daß das Gerät
; betriebsbereit ist. Nun sollten wir überprüfen, ob
; der Computer auch funktioniert. Lassen Sie ihn das
; selbst machen: drücken Sie nacheinander
; [ 9 ] [ RUN ]
; Auf der Anzeige erscheint in rascher Folge 999999,
; 888888, 777777 usw. . . . Mit 000000 beendet der
; Computer das Selbstprüfungsprogramm. Sie können es gleich wiederholen, indem Sie entweder mit
; CLR die Anzeige löschen und 9-RUN drücken,
; oder indem Sie auf CLR verzichten und gleich
; 9-RUN eintippen. Probieren wir's aus. Jetzt darf
; man sicher sein, daß der Computer funktioniert.
;
; 1.6 Das zweite Programm - ein Reaktionsspiel
; Lassen Sie uns zur Entspannung ein kleines Spielchen machen. Nicht daß Sie denken, wir wollten
; uns jetzt einem unnützen Zeitvertreib zuwenden:
; es ist ein Spiel mit einem ernsten Hintergrund.
; Überprüfen Sie Ihre Reaktionsfähigkeit. Im Computer ist ein Reaktionstest vorprogrammiert. Die
; "8" ist hierfür die Programmziffer, mit RUN lösen
; Sie das Programm aus. Drücken Sie
; [ 8 ] [ RUN ]
; Im Anzeigenfeld ist zunächst nichts zu sehen; dann
; aber läßt der Computer Zahlen rasen und zwar in
; Schritten von 1/1000 Sekunden. Sie sollten nun
; versuchen, den Zahlenlauf so schnell wie möglich
; mit Hilfe der STP-Taste zu stoppen. Auf geht's!
; [ 8 ] [ RUN ] ... [ STP ]
; Wenn Sie es mehrmals machen, werden Sie feststellen, daß der Zeitpunkt, an dem der Computer
; zu zählen anfängt, immer unterschiedlich ist. Sonst
; wäre es ja auch schnell langweilig. Sollten Sie im
; Eifer die STP-Taste gedrückt haben, bevor der
; Computer angefangen hat zu zählen, erscheint
; nach kurzer Zeit „000". Schummeln gilt nicht.
; Der ernste Hintergrund dieses netten Spielchens:
; Der Staat billigt einem Autofahrer bei Gefahr eine
; „Schrecksekunde" von 0,25 Sekunden zu, innerhalb dieses Zeitraumes muß der Autofahrer reagiert haben. Aber Sie lagen bestimmt unter 0,250
; Sekunden. Mit weniger als 0,150 (Anzeige .150)
; sind Sie Spitzenklasse, und bei Zeiten unter 0,100
; Sekunden (Anzeige .100) sind Sie reif für das
; Guinness-Buch der Rekorde.
; Bei diesem Spiel haben Sie nun noch eine weitere
; Funktionstaste kennengelernt. Die STP-Taste.* Mit
; ihr können Sie Programme, die im Computer ablaufen, unterbrechen und mit der RUN-Taste dann
; wieder weiterlaufen lassen. Eine Ausnahme: das
; Selbst-Überprüfungsprogramm kann man nicht
; stoppen. Wozu auch?!
; (Quelle: KOSMOS Computer Praxis CP 1, 1. Auflage 1983, Kapitel 1.5 und 1.6, Seite 8.)
;
;
;
;
; HLT 01.000 - Halt
;
; ANZ 02.000 - Anzeigen (Akku anzeigen)
;
; VZG 03.nnn - Verzögerung
; COMMAND_VZG_03:
; 07c7:
;
; AKO 04.nnn - Konstante nnn in Akku laden
;
; LDA 05.nnn - Inhalt von Zelle nnn in Akku laden
;
; ABS 06.nnn - Akku-Inhalt in Zelle nnn speichern
;
; ADD 07.nnn - Zum Akku-Inhalt den Inhalt von Zelle nnn addieren. Ergebnis im Akku.
;
; SUB 08.nnn - Zum Akku-Inhalt den Inhalt von Zelle nnn subtrahieren. Ergebnis im Akku.
;
; SPU 09.nnn - Unbedingt auf Adresse nnn springen.
;
; VGL 10.nnn - Prüfen, ob Akku-Inhalt gleich Inhalt von Zelle nnn.
;
; SPB 11.nnn - Bedingt auf Adresse nnn springen.
;
; VGR 12.nnn - Prüfen, ob Akku-Inhalt grössser als Inhalt von Zelle nnn.
;
; VKL 13.nnn - Prüfen, ob Akku-Inhalt kleiner als Inhalt von Zelle nnn.
;
; NEG 14.nnn - Akku-Inhalt negieren (nur "0" oder "1").
;
; UND 15.nnn - UND-Verknüpfung zwischen Akku-Inhalt und Inhalt von Zelle nnn (nur "0" oder "1").
;
; P1E 16.00n - Information an Klemme n von Port 1 in den Akku bringen ("0" oder "1").
; 16.000 - Information an Klemmen von Port 1 in eine Dezimalzahl wandeln und in den Akku bringen.
;
;
; P1A 17.00n - Akku Inhalt ("0" oder "1") an Port 1 Klemme n bringen.
; 17.000 - Dezimalen Akku-Inhalt in eine Dual-Zahl wandeln und an Port 1 bringen.
;
; P2A 18.00n -
; 18.000 -
;
; LIA 19.nnn - Akku indirekt laden
;
; AIS 20.nnn - Akku-Inhalt indirekt speichern
;
; SUI 21.nnn - Indirekt unbedingt springen
;
; *)P3E 22.00n - Information an Port 3 in den Akku bringen ("0" oder "1").
; 22.000 -
;
; *)P4A 23.00n -
; 23.000 -
;
; *)P5A 24.00n -
; 24.000 -
;
; *) Nur für Speichererweiterung
;
;
;
;
; Tastatur einlesen und interpretieren
;
;
; Eingegebenes Programm und Daten speichern
;
; Programm Anzeigen
;
; Einzelschritt Ausführung
;
;
; Fehlermeldungen (F 001 bis F 007)
;
; F 001
; F 002
; F 003
; F 004
; F 005
; F 006
; F 007
;
init_0:
0000: 0429 jmp $0029 ; start_0:
; DATA?
0002: 00 nop
0003: 93 retr
0004: 00 nop
0005: 00 nop
0006: 00 nop
0007: 445c jmp $025C
0009: 00 nop
000a: 86d1 jni $00D1
000c: d1 xrl a,@r1
000d: d1 xrl a,@r1
000e: d1 xrl a,@r1
000f: d1 xrl a,@r1
0010: d1 xrl a,@r1
0011: d1 xrl a,@r1
0012: d1 xrl a,@r1
0013: d1 xrl a,@r1
0014: d1 xrl a,@r1
0015: 21 xch a,@r1
0016: eb23 djnz r3,$0023
0018: 25 en tcnti
0019: 861f jni $001F
001b: 27 clr a
001c: c3 .db 0xc3
001d: 98bf anl bus,#$BF
001f: c403 jmp $0603
0021: 24ff jmp $01FF
0023: e40e jmp $070E
0025: c422 jmp $0622
0027: 24c4 jmp $01C4
start_0:
0029: b81e mov r0,#$1E ; 0x1E 30 dec
002b: b000 mov @r0,#$0
002d: b820 mov r0,#$20 ; 0x20 32 dec
002f: bb28 mov r3,#$28 ; 0x28 40 dec
loop_1:
0031: b000 mov @r0,#$0
0033: 18 inc r0
0034: eb31 djnz r3,$0031 ; decrement r3 and jump to loop_1: if r3 is not zero
0036: be00 mov r6,#$0
0038: bf00 mov r7,#$0
003a: b81a mov r0,#$1A
003c: b001 mov @r0,#$1
003e: d4b4 call $06B4
0040: 9acf anl p2,#$CF ; 1100'1111
0042: 9abf anl p2,#$BF ; 1011'1111
0044: 9aef anl p2,#$EF ; 1110'1111
0046: 8a20 orl p2,#$20 ; 0010'0000
0048: b800 mov r0,#$0
004a: 230f mov a,#$F
004c: 90 movx @r0,a
004d: b802 mov r0,#$2
004f: 23ff mov a,#$FF
0051: 90 movx @r0,a
0052: 9adf anl p2,#$DF
0054: 8a10 orl p2,#$10
0056: b800 mov r0,#$0
0058: 230d mov a,#$D
005a: 90 movx @r0,a
005b: b801 mov r0,#$1
005d: 23ff mov a,#$FF
005f: 90 movx @r0,a
0060: b803 mov r0,#$3
0062: 90 movx @r0,a
0063: 9a5f anl p2,#$5F
0065: 8a10 orl p2,#$10
0067: b813 mov r0,#$13
0069: 235a mov a,#$5A
006b: 90 movx @r0,a
006c: 27 clr a
006d: 80 movx a,@r0
006e: d35a xrl a,#$5A
0070: b83b mov r0,#$3B
0072: c694 jz $0094 ; label_2:
0074: b07f mov @r0,#$7F
0076: bb04 mov r3,#$4
0078: b83f mov r0,#$3F
007a: 23ff mov a,#$FF
;; run im Schrittmodus ?
loop_3:
007c: a0 mov @r0,a
007d: 18 inc r0
007e: eb7c djnz r3,$007C ; loop_3:
0080: 9a4f anl p2,#$4F
0082: 7428 call $0328
0084: 25 en tcnti ; enable timer counter interrupt
0085: 55 strt t
0086: b81e mov r0,#$1E
0088: f0 mov a,@r0
0089: c686 jz $0086
008b: b944 mov r1,#$44
008d: a1 mov @r1,a
008e: 230a mov a,#$A
0090: 60 add a,@r0
0091: b000 mov @r0,#$0
0093: b3 jmpp @a
label_2:
0094: b0ff mov @r0,#$FF
0096: 0476 jmp $0076
0098: fe mov a,r6
0099: c6bb jz $00BB
009b: d303 xrl a,#$3
009d: 96c9 jnz $00C9
009f: b827 mov r0,#$27
00a1: 7438 call $0338
00a3: b83a mov r0,#$3A
00a5: f0 mov a,@r0
00a6: 52b9 jb2 $00B9
00a8: b820 mov r0,#$20
00aa: b073 mov @r0,#$73
00ac: b827 mov r0,#$27
00ae: ba02 mov r2,#$2
00b0: 344e call $014E
00b2: b838 mov r0,#$38 ; "8"
00b4: a0 mov @r0,a
00b5: be00 mov r6,#$0
00b7: 0486 jmp $0086
00b9: 2446 jmp $0146
00bb: d4b4 call $06B4
00bd: 0486 jmp $0086
00bf: d4ea call $06EA
00c1: 0486 jmp $0086
00c3: 3479 call $0179
00c5: be00 mov r6,#$0
00c7: 0486 jmp $0086
00c9: bc01 mov r4,#$1
00cb: c4fd jmp $06FD
00cd: 3479 call $0179
00cf: 04d9 jmp $00D9
00d1: fe mov a,r6
00d2: c6cd jz $00CD
00d4: 97 clr c
00d5: 03fb add a,#$FB
00d7: f6c9 jc $00C9
00d9: fe mov a,r6
00da: 0327 add a,#$27
00dc: a8 mov r0,a
00dd: b944 mov r1,#$44
00df: f1 mov a,@r1
00e0: 07 dec a
00e1: a0 mov @r0,a
00e2: aa mov r2,a
00e3: 34aa call $01AA
00e5: 0486 jmp $0086
00e7: 2446 jmp $0146
00e9: 240c jmp $010C
00eb: fe mov a,r6
00ec: d303 xrl a,#$3
00ee: 96e9 jnz $00E9
00f0: 23f7 mov a,#$F7
00f2: 7433 call $0333
00f4: b827 mov r0,#$27
00f6: 7438 call $0338
00f8: b83a mov r0,#$3A
00fa: f0 mov a,@r0
00fb: 52e7 jb2 $00E7
00fd: b827 mov r0,#$27
00ff: ba02 mov r2,#$2
0101: 344e call $014E
0103: af mov r7,a
0104: be00 mov r6,#$0
0106: b820 mov r0,#$20
0108: b079 mov @r0,#$79
010a: 0486 jmp $0086
010c: fe mov a,r6
010d: d305 xrl a,#$5
010f: 9644 jnz $0144
0111: b83a mov r0,#$3A
0113: f0 mov a,@r0
0114: 724a jb3 $014A
0116: b827 mov r0,#$27
0118: ba01 mov r2,#$1
011a: 344e call $014E
011c: 97 clr c
011d: a9 mov r1,a
011e: 03e7 add a,#$E7
0120: f64a jc $014A
0122: b829 mov r0,#$29
0124: ba02 mov r2,#$2
0126: 344e call $014E
0128: b64a jf0 $014A
012a: ac mov r4,a
012b: f9 mov a,r1
012c: aa mov r2,a
012d: ff mov a,r7
012e: 740a call $030A
0130: fa mov a,r2
0131: 91 movx @r1,a
0132: 19 inc r1
0133: fc mov a,r4
0134: 91 movx @r1,a
0135: b83b mov r0,#$3B
0137: ff mov a,r7
0138: d0 xrl a,@r0
0139: c63e jz $013E
013b: 1f inc r7
013c: 2404 jmp $0104
013e: 2308 mov a,#$8
0140: 742e call $032E
0142: 2404 jmp $0104
0144: 04c9 jmp $00C9
0146: 23fb mov a,#$FB
0148: 7433 call $0333
014a: bc04 mov r4,#$4
014c: c4fd jmp $06FD
014e: f9 mov a,r1
014f: ab mov r3,a
0150: b93c mov r1,#$3C
0152: bc03 mov r4,#$3
0154: f0 mov a,@r0
0155: a1 mov @r1,a
0156: 18 inc r0
0157: 19 inc r1
0158: ec54 djnz r4,$0154
015a: fb mov a,r3
015b: a9 mov r1,a
015c: b83c mov r0,#$3C
015e: f0 mov a,@r0
015f: 97 clr c
0160: 85 clr f0
0161: f7 rlc a
0162: f676 jc $0176
0164: f7 rlc a
0165: f676 jc $0176
0167: 60 add a,@r0
0168: f676 jc $0176
016a: f7 rlc a
016b: f676 jc $0176
016d: 18 inc r0
016e: 60 add a,@r0
016f: f676 jc $0176
0171: a0 mov @r0,a
0172: ea61 djnz r2,$0161
0174: f0 mov a,@r0
0175: 83 ret
0176: 95 cpl f0
0177: 97 clr c
0178: 83 ret
0179: ba06 mov r2,#$6 ; r2 <- 0x06
017b: b820 mov r0,#$20 ; r0 <- 0x20 (32 dec)
loop_1:
017d: b000 mov @r0,#$0 ; @r0 <- 0x00
017f: 18 inc r0 ; r0++
0180: ea7d djnz r2,$017D ; decrement r2 jump if not zero to loop_1:
0182: 83 ret
; tastatur einlesen ?
0183: f0 mov a,@r0
0184: 54d9 call $02D9
0186: b693 jf0 $0193
0188: f4eb call $07EB ; label_07eb:
018a: fc mov a,r4
018b: f4eb call $07EB ; label_07eb:
018d: fa mov a,r2
018e: f4eb call $07EB ; label_07eb:
0190: be00 mov r6,#$0
0192: 83 ret
0193: 85 clr f0
0194: 248a jmp $018A
0196: 81 movx a,@r1
0197: b839 mov r0,#$39 ; "9"
0199: a0 mov @r0,a
019a: be00 mov r6,#$0
019c: 85 clr f0
019d: 95 cpl f0
019e: 3483 call $0183
01a0: 19 inc r1
01a1: 81 movx a,@r1
01a2: b839 mov r0,#$39 ; "9"
01a4: a0 mov @r0,a
01a5: be02 mov r6,#$2
01a7: 3483 call $0183
01a9: 83 ret
01aa: b821 mov r0,#$21
01ac: b922 mov r1,#$22
01ae: bb04 mov r3,#$4
01b0: f1 mov a,@r1
01b1: a0 mov @r0,a
01b2: 18 inc r0
01b3: 19 inc r1
01b4: ebb0 djnz r3,$01B0
01b6: 2300 mov a,#$0
01b8: 6a add a,r2
01b9: e3 movp3 a,@a
01ba: b825 mov r0,#$25
01bc: a0 mov @r0,a
01bd: 1e inc r6
01be: 83 ret
01bf: 85 clr f0
01c0: 74f3 call $03F3
01c2: 24f1 jmp $01F1
01c4: 3479 call $0179
01c6: 74f3 call $03F3
01c8: b820 mov r0,#$20
01ca: b023 mov @r0,#$23
01cc: 89c0 orl p1,#$C0
01ce: b83a mov r0,#$3A
01d0: bc3c mov r4,#$3C
01d2: bbfa mov r3,#$FA
01d4: 74b6 call $03B6 ; label_03b6_wait_r3:(250)
01d6: f0 mov a,@r0
01d7: 12bf jb0 $01BF
01d9: ecd2 djnz r4,$01D2
01db: 27 clr a
01dc: 740a call $030A
01de: 74bd call $03BD
01e0: b6bf jf0 $01BF
01e2: b83b mov r0,#$3B
01e4: f0 mov a,@r0
01e5: f2e9 jb7 $01E9
01e7: 24f1 jmp $01F1
01e9: 23ff mov a,#$FF
01eb: 740a call $030A
01ed: 74bd call $03BD
01ef: b6fd jf0 $01FD
01f1: 997f anl p1,#$7F
01f3: 3479 call $0179
01f5: b820 mov r0,#$20
01f7: b063 mov @r0,#$63
01f9: be00 mov r6,#$0
01fb: 0486 jmp $0086
01fd: 24bf jmp $01BF
01ff: 23f7 mov a,#$F7
0201: 7433 call $0333
0203: fe mov a,r6
0204: c627 jz $0227
0206: d303 xrl a,#$3
0208: 9640 jnz $0240
020a: b827 mov r0,#$27
020c: 7438 call $0338
020e: b83a mov r0,#$3A
0210: f0 mov a,@r0
0211: 523a jb2 $023A
0213: b827 mov r0,#$27
0215: ba02 mov r2,#$2
0217: 344e call $014E
0219: af mov r7,a
021a: 3479 call $0179
021c: ff mov a,r7
021d: 740a call $030A
021f: 3496 call $0196
0221: b820 mov r0,#$20
0223: b039 mov @r0,#$39
0225: 0486 jmp $0086
0227: 97 clr c
0228: ff mov a,r7
0229: 0301 add a,#$1
022b: af mov r7,a
022c: f638 jc $0238
022e: b83b mov r0,#$3B
0230: f0 mov a,@r0
0231: f21a jb7 $021A
0233: ff mov a,r7
0234: f23c jb7 $023C
0236: 441a jmp $021A
0238: bfff mov r7,#$FF
023a: 2446 jmp $0146
023c: bf7f mov r7,#$7F
023e: 443a jmp $023A
0240: fe mov a,r6
0241: d301 xrl a,#$1
0243: c647 jz $0247
0245: 04c9 jmp $00C9
0247: b827 mov r0,#$27
0249: f0 mov a,@r0
024a: d309 xrl a,#$9
024c: 9645 jnz $0245
024e: 3479 call $0179
0250: b820 mov r0,#$20
0252: b039 mov @r0,#$39 ; "9"
0254: b807 mov r0,#$7
0256: be02 mov r6,#$2
0258: 3483 call $0183
025a: 0486 jmp $0086
025c: d5 sel rb1
025d: 2f xch a,r7
025e: 23e0 mov a,#$E0
0260: 62 mov t,a
0261: ea6b djnz r2,$026B
0263: b925 mov r1,#$25
0265: bdfe mov r5,#$FE
0267: ba06 mov r2,#$6
0269: bc35 mov r4,#$35
026b: 8aa0 orl p2,#$A0
026d: 9aef anl p2,#$EF
026f: 27 clr a
0270: b801 mov r0,#$1
0272: 90 movx @r0,a
0273: fd mov a,r5
0274: b803 mov r0,#$3
0276: 90 movx @r0,a
0277: f1 mov a,@r1
0278: b801 mov r0,#$1
027a: 90 movx @r0,a
027b: 8a0f orl p2,#$F
027d: 0c movd a,p4
027e: 97 clr c
027f: bb04 mov r3,#$4
0281: 67 rrc a
0282: f688 jc $0288
0284: eb81 djnz r3,$0281
0286: 44bc jmp $02BC
0288: fa mov a,r2
0289: 07 dec a
028a: e7 rl a
028b: e7 rl a
028c: 17 inc a
028d: 2b xch a,r3
028e: 37 cpl a
028f: 17 inc a
0290: 6b add a,r3
0291: ae mov r6,a
0292: f2bc jb7 $02BC
0294: fc mov a,r4
0295: a8 mov r0,a
0296: fe mov a,r6
0297: d0 xrl a,@r0
0298: c6b8 jz $02B8
029a: fe mov a,r6
029b: a0 mov @r0,a
029c: fe mov a,r6
029d: d30f xrl a,#$F
029f: c6c2 jz $02C2
02a1: fe mov a,r6
02a2: d30e xrl a,#$E
02a4: c6c8 jz $02C8
02a6: fd mov a,r5
02a7: e7 rl a
02a8: ad mov r5,a
02a9: c9 dec r1
02aa: cc dec r4
02ab: b83a mov r0,#$3A
02ad: f0 mov a,@r0
02ae: 92ce jb4 $02CE
02b0: d2d4 jb6 $02D4
02b2: 9a7f anl p2,#$7F
02b4: 2f xch a,r7
02b5: c5 sel rb0
02b6: 25 en tcnti
02b7: 93 retr
02b8: be00 mov r6,#$0
02ba: 44a6 jmp $02A6
02bc: fc mov a,r4
02bd: a8 mov r0,a
02be: b000 mov @r0,#$0
02c0: 44a6 jmp $02A6
02c2: 2301 mov a,#$1
02c4: 742e call $032E
02c6: 44a6 jmp $02A6
02c8: 2302 mov a,#$2
02ca: 742e call $032E
02cc: 44a6 jmp $02A6
02ce: 9adf anl p2,#$DF
02d0: 8a10 orl p2,#$10
02d2: 44b0 jmp $02B0
02d4: 8a80 orl p2,#$80
02d6: 44b4 jmp $02B4
02d8: 83 ret
; Wandlung bin -> dec ???
02d9: 97 clr c
02da: bc00 mov r4,#$0
02dc: 03f6 add a,#$F6
02de: e6e4 jnc $02E4
02e0: 97 clr c
02e1: 1c inc r4
02e2: 44dc jmp $02DC
02e4: 030a add a,#$A
02e6: aa mov r2,a
02e7: 97 clr c
02e8: fc mov a,r4
02e9: bc00 mov r4,#$0
02eb: 03f6 add a,#$F6
02ed: e6f3 jnc $02F3
02ef: 97 clr c
02f0: 1c inc r4
02f1: 44eb jmp $02EB
02f3: 030a add a,#$A
02f5: 2c xch a,r4
02f6: 97 clr c
02f7: 83 ret
; -- DATA?
02f8: 00 nop
02f9: 88c4 orl bus,#$C4
02fb: 00 nop
02fc: 00 nop
02fd: 00 nop
02fe: 00 nop
02ff: 1e inc r6
0300: 3f movd p7,a
0301: 06 .db 0x06
0302: 5b anl a,r3
0303: 4f orl a,r7
0304: 66 .db 0x66
0305: 6d add a,r5
0306: 7d addc a,r5
0307: 27 clr a
0308: 7f addc a,r7
0309: 6f add a,r7
label_030a:
030a: f219 jb7 $0319
030c: ab mov r3,a
030d: 23ef mov a,#$EF
030f: 7433 call $0333
0311: 8a20 orl p2,#$20 ; OR
0313: 9aef anl p2,#$EF ; AND
0315: fb mov a,r3
0316: e7 rl a
0317: a9 mov r1,a
0318: 83 ret
0319: 0380 add a,#$80
031b: 97 clr c
031c: ab mov r3,a
031d: 2310 mov a,#$10
031f: 742e call $032E
0321: 8a10 orl p2,#$10
0323: 9adf anl p2,#$DF
0325: fb mov a,r3
0326: 6416 jmp $0316
0328: 27 clr a ; A := 0
0329: a9 mov r1,a
032a: 91 movx @r1,a
032b: e92a djnz r1,$032A
032d: 83 ret
; OR A
032e: b83a mov r0,#$3A ; "10" (dec) 0011'1010 bin
0330: 40 orl a,@r0
0331: a0 mov @r0,a
0332: 83 ret
; AND A
0333: b83a mov r0,#$3A ; 10 dec
0335: 50 anl a,@r0
0336: a0 mov @r0,a
0337: 83 ret
0338: ba02 mov r2,#$2
033a: 344e call $014E
033c: b648 jf0 $0348
033e: f241 jb7 $0341
0340: 83 ret
0341: b83b mov r0,#$3B
0343: f0 mov a,@r0
0344: f240 jb7 $0340
0346: 6449 jmp $0349
0348: 85 clr f0
0349: 2304 mov a,#$4
034b: 742e call $032E
034d: 6440 jmp $0340
034f: 85 clr f0
0350: f253 jb7 $0353
0352: 83 ret
0353: b83b mov r0,#$3B
0355: f0 mov a,@r0
0356: f252 jb7 $0352
0358: 95 cpl f0
0359: 6452 jmp $0352
035b: 81 movx a,@r1
035c: ab mov r3,a
035d: 744f call $034F
035f: b664 jf0 $0364
0361: fb mov a,r3
0362: 740a call $030A
0364: 83 ret
0365: 81 movx a,@r1
0366: ab mov r3,a
0367: 744f call $034F
0369: b678 jf0 $0378
036b: fb mov a,r3
036c: 740a call $030A
036e: 81 movx a,@r1
036f: 9678 jnz $0378
0371: 19 inc r1
0372: b836 mov r0,#$36
0374: f0 mov a,@r0
0375: 9678 jnz $0378
0377: 18 inc r0
0378: 83 ret
0379: ec82 djnz r4,$0382
037b: 127f jb0 $037F
037d: 27 clr a
037e: 83 ret
037f: 2301 mov a,#$1
0381: 83 ret
0382: 77 rr a
0383: 6479 jmp $0379
0385: 2340 mov a,#$40
0387: 742e call $032E
0389: 23ef mov a,#$EF
038b: 7433 call $0333
038d: 8aa0 orl p2,#$A0 ; OR at port 2 0xA0 1010'0000 bin
038f: 9aef anl p2,#$EF ; AND at port 2 0xEF 1110'1111 bin
0391: 83 ret
0392: 2350 mov a,#$50 ; 0x50 80 dec
0394: 742e call $032E
0396: 9adf anl p2,#$DF ; AND at port 2 0xDF 1101'1111 bin
0398: 8a90 orl p2,#$90 ; OR at port 2 0x90 1001'0000 bin
039a: 83 ret
039b: b836 mov r0,#$36 ; "6"
039d: b000 mov @r0,#$0
039f: 18 inc r0
03a0: a0 mov @r0,a
03a1: 83 ret
03a2: aa mov r2,a
03a3: 97 clr c
03a4: a7 cpl c
03a5: 27 clr a
03a6: f7 rlc a
03a7: eaa6 djnz r2,$03A6
03a9: aa mov r2,a
03aa: f0 mov a,@r0
03ab: c6b1 jz $03B1
03ad: fa mov a,r2
03ae: 41 orl a,@r1
03af: a1 mov @r1,a
03b0: 83 ret
03b1: fa mov a,r2
03b2: 37 cpl a
03b3: 51 anl a,@r1
03b4: 64af jmp $03AF
label_03b6_wait_r3:
; This function waits a while
;
; input: r3 function WAIT(in_counter) {
; for (a=in_counter; a>=0; a--) {
03b6: bac8 mov r2,#$C8 ; r2 := 200 dec cnt=200
03b8: eab8 djnz r2,$03B8 ; decrement r2, jump to $03B8 if r2 is not zero for (a=cnt; a>=0; a--) { ; }
03ba: ebb6 djnz r3,$03B6 ; decrement r2, jump to label_03b6: if r3 is not zero }
03bc: 83 ret ; }
; label_???
03bd: b900 mov r1,#$0
03bf: b83a mov r0,#$3A
03c1: f0 mov a,@r0
03c2: 12eb jb0 $03EB
03c4: 97 clr c
03c5: b808 mov r0,#$8
03c7: 81 movx a,@r1
03c8: 67 rrc a
03c9: e6dd jnc $03DD
03cb: 997f anl p1,#$7F
03cd: bb1e mov r3,#$1E
03cf: 74b6 call $03B6 ; label_03b6_wait_r3:(30)
03d1: 8980 orl p1,#$80
03d3: bb3c mov r3,#$3C
03d5: 74b6 call $03B6 ; label_03b6_wait_r3:(195)
03d7: e8c8 djnz r0,$03C8
03d9: e9bf djnz r1,$03BF
03db: 97 clr c
03dc: 83 ret
03dd: 997f anl p1,#$7F
03df: bb3c mov r3,#$3C
03e1: 74b6 call $03B6 ; label_03b6_wait_r3:(195)
03e3: 8980 orl p1,#$80
03e5: bb1e mov r3,#$1E
03e7: 74b6 call $03B6 ; label_03b6_wait_r3:(30)
03e9: 64d7 jmp $03D7
03eb: 85 clr f0
03ec: 95 cpl f0
03ed: 23fe mov a,#$FE
03ef: 7433 call $0333
03f1: 64db jmp $03DB
03f3: 23fe mov a,#$FE
03f5: 7433 call $0333
03f7: 83 ret
; -- DATA???
03f8: 00 nop
03f9: ef54 djnz r7,$0354
03fb: 28 xch a,r0
03fc: d236 jb6 $0336
03fe: 00 nop
03ff: 05 en i
0400: 19 inc r1
0401: 34eb call $01EB
0403: 7b addc a,r3
0404: 465f jnt1 $045F
0406: 4f orl a,r7
0407: f3 .db 0xf3
0408: 1b inc r3
0409: 8f orld p7,a
040a: 1d inc r5
040b: 961f jnz $041F
040d: 21 xch a,@r1
040e: a6 .db 0xa6
040f: c1 .db 0xc1
0410: 2325 mov a,#$25
0412: 27 clr a
0413: 6d add a,r5
0414: 749f call $039F
0416: 29 xch a,r1
0417: 2b xch a,r3
0418: 2d xch a,r5
0419: c459 jmp $0659 ;
;
; Daten für das Selbstprüfungsprogramm welches mit 9 - RUN aufgerufen werden kann.
; Daten für Sieben Segment Anzeige, Codierung wie hier angegeben mit 7 Bits: https://de.wikipedia.org/wiki/Segmentanzeige
;
; 7-Segment Anzeige: "8 8 8. 8 8 8"
;
041b: a40b .db a4 0b ; 0x0b: 1010'0100 0 000'1011 -> ""
041d: a42b .db a4 2b ; 0x2b: 1010'0100 0 010'1011 -> ""
041f: a452 .db a4 52 ; 0x52: 1010'0100 0 101'0010 -> ""
0421: a43e .db a4 3e ; 0x3d: 1010'0100 0 011'1110 -> ""
0423: a46a .db a4 6A ; 0x6a: 1010'0100 0 110'1010 -> ""
0425: a48d .db a4 8D ; 0x8d: 1010'0100 1 000'1101 -> ""
0427: a4a4 .db a4 A4 ; 0xa4: 1010'0100 1 010'0100 -> ""
0429: a4c9 .db a4 C9 ; 0xc9: 1010'0100 1 100'1001 -> ""
042b: a4ef .db a4 EF ; 0xef: 1010'0100 1 110'1111 -> ""
042d: a4f9 .db a4 F9 ; 0xf9: 1010'0100 1 111'1001 -> "3"
;
042f: 81 movx a,@r1
0430: 0300 add a,#$0
0432: 19 inc r1
0433: b3 jmpp @a
0434: 2301 mov a,#$1
0436: 7433 call $0333
0438: b838 mov r0,#$38 ; "8"
043a: f0 mov a,@r0
043b: b83b mov r0,#$3B
043d: d0 xrl a,@r0
043e: c644 jz $0444
0440: 85 clr f0
0441: 95 cpl f0
0442: c42f jmp $062F
0444: c473 jmp $0673
0446: b836 mov r0,#$36
0448: b000 mov @r0,#$0
044a: 18 inc r0
044b: 81 movx a,@r1
044c: a0 mov @r0,a
044d: c42f jmp $062F
044f: 745b call $035B
0451: b65d jf0 $045D
0453: b836 mov r0,#$36
0455: f0 mov a,@r0
0456: 91 movx @r1,a
0457: 18 inc r0
0458: 19 inc r1
0459: f0 mov a,@r0
045a: 91 movx @r1,a
045b: c42f jmp $062F
045d: c45d jmp $065D
045f: 745b call $035B
0461: b65d jf0 $045D
0463: b836 mov r0,#$36
0465: 81 movx a,@r1
0466: a0 mov @r0,a
0467: 18 inc r0
0468: 19 inc r1
0469: 81 movx a,@r1
046a: a0 mov @r0,a
046b: c42f jmp $062F
046d: 745b call $035B
046f: b65d jf0 $045D
0471: 19 inc r1
0472: 845f jmp $045F
0474: 745b call $035B
0476: b65d jf0 $045D
0478: 19 inc r1
0479: 844f jmp $044F
047b: 81 movx a,@r1
047c: c68d jz $048D
047e: aa mov r2,a
047f: bb01 mov r3,#$1
0481: bc01 mov r4,#$1
0483: bdc8 mov r5,#$C8
0485: ed85 djnz r5,$0485
0487: ec83 djnz r4,$0483
0489: eb81 djnz r3,$0481
048b: ea7f djnz r2,$047F
048d: c42f jmp $062F
048f: 81 movx a,@r1
0490: b838 mov r0,#$38 ; "8"
0492: ab mov r3,a
0493: a0 mov @r0,a
0494: c439 jmp $0639
0496: b83a mov r0,#$3A
0498: f0 mov a,@r0
0499: b29d jb5 $049D
049b: c42f jmp $062F
049d: 848f jmp $048F
049f: 745b call $035B
04a1: b65d jf0 $045D
04a3: 19 inc r1
04a4: 848f jmp $048F
04a6: b836 mov r0,#$36
04a8: f0 mov a,@r0
04a9: 96bd jnz $04BD
04ab: 97 clr c
04ac: 18 inc r0
04ad: f0 mov a,@r0
04ae: 03fe add a,#$FE
04b0: f6bd jc $04BD
04b2: f0 mov a,@r0
04b3: c6b9 jz $04B9
04b5: b000 mov @r0,#$0
04b7: c42f jmp $062F
04b9: b001 mov @r0,#$1
04bb: c42f jmp $062F
04bd: bc05 mov r4,#$5
04bf: c4fd jmp $06FD
04c1: b836 mov r0,#$36
04c3: f0 mov a,@r0
04c4: 96bd jnz $04BD
04c6: 97 clr c
04c7: 18 inc r0
04c8: f0 mov a,@r0
04c9: 03fe add a,#$FE
04cb: f6bd jc $04BD
04cd: 745b call $035B
04cf: b65d jf0 $045D
04d1: 81 movx a,@r1
04d2: 96bd jnz $04BD
04d4: 97 clr c
04d5: 19 inc r1
04d6: 81 movx a,@r1
04d7: 03fe add a,#$FE
04d9: f6bd jc $04BD
04db: b837 mov r0,#$37
04dd: f0 mov a,@r0
04de: c6bb jz $04BB
04e0: 81 movx a,@r1
04e1: c6e7 jz $04E7
04e3: b001 mov @r0,#$1
04e5: c42f jmp $062F
04e7: b000 mov @r0,#$0
04e9: c42f jmp $062F
04eb: d4ea call $06EA
04ed: c42f jmp $062F
04ef: a40f jmp $050F
04f1: a405 jmp $0505
04f3: 7465 call $0365
04f5: b65d jf0 $045D
04f7: 96bd jnz $04BD
04f9: 76ef jf1 $04EF
04fb: 97 clr c
04fc: 81 movx a,@r1
04fd: 60 add a,@r0
04fe: f6f1 jc $04F1
0500: a0 mov @r0,a
0501: c42f jmp $062F
0503: c45d jmp $065D
0505: bc06 mov r4,#$6
0507: c4fd jmp $06FD
0509: 84bd jmp $04BD
050b: a5 clr f1
050c: b5 cpl f1
050d: 84f3 jmp $04F3
050f: a5 clr f1
0510: 81 movx a,@r1
0511: ab mov r3,a
0512: d0 xrl a,@r0
0513: c627 jz $0527
0515: fb mov a,r3
0516: c625 jz $0525
0518: 37 cpl a
0519: 97 clr c
051a: 0301 add a,#$1
051c: 60 add a,@r0
051d: e605 jnc $0505
051f: 97 clr c
0520: f0 mov a,@r0
0521: 07 dec a
0522: eb21 djnz r3,$0521
0524: a0 mov @r0,a
0525: c42f jmp $062F
0527: b000 mov @r0,#$0
0529: c42f jmp $062F
052b: f4e1 call $07E1
052d: 7465 call $0365
052f: b603 jf0 $0503
0531: 9609 jnz $0509
0533: 81 movx a,@r1
0534: d0 xrl a,@r0
0535: c63a jz $053A
0537: 97 clr c
0538: c42f jmp $062F
053a: f4e6 call $07E6
053c: a437 jmp $0537
053e: f4e1 call $07E1
0540: 7465 call $0365
0542: b603 jf0 $0503
0544: 9609 jnz $0509
0546: 81 movx a,@r1
0547: c637 jz $0537
0549: 37 cpl a
054a: 97 clr c
054b: 0301 add a,#$1
054d: 60 add a,@r0
054e: e63a jnc $053A
0550: a437 jmp $0537
0552: f4e1 call $07E1
0554: 7465 call $0365
0556: b603 jf0 $0503
0558: 9609 jnz $0509
055a: f0 mov a,@r0
055b: c637 jz $0537
055d: 37 cpl a
055e: 97 clr c
055f: 0301 add a,#$1
0561: ab mov r3,a
0562: 81 movx a,@r1
0563: 6b add a,r3
0564: e63a jnc $053A
0566: a437 jmp $0537
0568: a474 jmp $0574
056a: 81 movx a,@r1
056b: 9668 jnz $0568
056d: 89ff orl p1,#$FF
056f: 09 in a,p1
0570: 749b call $039B
0572: c42f jmp $062F
0574: ac mov r4,a
0575: 97 clr c
0576: 03f7 add a,#$F7
0578: f609 jc $0509
057a: fc mov a,r4
057b: aa mov r2,a
057c: 97 clr c
057d: a7 cpl c
057e: 27 clr a
057f: f7 rlc a
0580: ea7f djnz r2,$057F
0582: b93f mov r1,#$3F
0584: 41 orl a,@r1
0585: 39 outl p1,a
0586: 09 in a,p1
0587: 7479 call $0379
0589: 749b call $039B
058b: c42f jmp $062F
058d: b837 mov r0,#$37
058f: 81 movx a,@r1
0590: aa mov r2,a
0591: b93f mov r1,#$3F
0593: 969a jnz $059A
0595: f0 mov a,@r0
0596: a1 mov @r1,a
0597: 39 outl p1,a
0598: c42f jmp $062F
059a: 97 clr c
059b: 03f7 add a,#$F7
059d: f609 jc $0509
059f: fa mov a,r2
05a0: 74a2 call $03A2
05a2: a497 jmp $0597
05a4: 81 movx a,@r1
05a5: aa mov r2,a
05a6: 7485 call $0385
05a8: b940 mov r1,#$40
05aa: bc02 mov r4,#$2
05ac: b837 mov r0,#$37
05ae: fa mov a,r2
05af: 96bf jnz $05BF
05b1: f0 mov a,@r0
05b2: a1 mov @r1,a
05b3: 2c xch a,r4
05b4: a8 mov r0,a
05b5: 2c xch a,r4
05b6: 90 movx @r0,a
05b7: 23bf mov a,#$BF
05b9: 7433 call $0333
05bb: 9a7f anl p2,#$7F
05bd: c42f jmp $062F
05bf: 97 clr c
05c0: 03f7 add a,#$F7
05c2: f6e7 jc $05E7
05c4: fa mov a,r2
05c5: 74a2 call $03A2
05c7: a4b3 jmp $05B3
05c9: 81 movx a,@r1
05ca: ac mov r4,a
05cb: 7492 call $0392
05cd: b802 mov r0,#$2
05cf: fc mov a,r4
05d0: 96dd jnz $05DD
05d2: 80 movx a,@r0
05d3: 749b call $039B
05d5: 23bf mov a,#$BF
05d7: 7433 call $0333
05d9: 9a7f anl p2,#$7F
05db: c42f jmp $062F
05dd: 97 clr c
05de: 03f7 add a,#$F7
05e0: f6e7 jc $05E7
05e2: 80 movx a,@r0
05e3: 7479 call $0379
05e5: a4d3 jmp $05D3
05e7: 23bf mov a,#$BF
05e9: 7433 call $0333
05eb: 9a7f anl p2,#$7F
05ed: 84bd jmp $04BD
05ef: 81 movx a,@r1
05f0: aa mov r2,a
05f1: 7492 call $0392
05f3: b941 mov r1,#$41
05f5: bc01 mov r4,#$1
05f7: a4ac jmp $05AC
05f9: 81 movx a,@r1
05fa: aa mov r2,a
05fb: 7492 call $0392
05fd: b942 mov r1,#$42
05ff: bc03 mov r4,#$3
0601: a4ac jmp $05AC
0603: fe mov a,r6
0604: d301 xrl a,#$1
0606: 9614 jnz $0614
0608: b827 mov r0,#$27
060a: f0 mov a,@r0
060b: d309 xrl a,#$9
060d: c678 jz $0678
060f: f0 mov a,@r0
0610: d308 xrl a,#$8
0612: c67a jz $067A
0614: 3479 call $0179
0616: be00 mov r6,#$0
0618: b83a mov r0,#$3A
061a: f0 mov a,@r0
061b: 124f jb0 $064F
061d: b83a mov r0,#$3A
061f: f0 mov a,@r0
0620: 3253 jb1 $0653
0622: b838 mov r0,#$38 ; "8"
0624: f0 mov a,@r0
0625: 740a call $030A
0627: 97 clr c
0628: 81 movx a,@r1
0629: 03e7 add a,#$E7
062b: f659 jc $0659
062d: 842f jmp $042F
062f: 97 clr c
0630: b838 mov r0,#$38 ; "8"
0632: f0 mov a,@r0
0633: 0301 add a,#$1
0635: a0 mov @r0,a
0636: ab mov r3,a
0637: f65d jc $065D
0639: b83b mov r0,#$3B
063b: f0 mov a,@r0
063c: f241 jb7 $0641
063e: fb mov a,r3
063f: f25d jb7 $065D
0641: b673 jf0 $0673
0643: b83a mov r0,#$3A
0645: f0 mov a,@r0
0646: 326f jb1 $066F
0648: b83a mov r0,#$3A
064a: f0 mov a,@r0
064b: 1261 jb0 $0661
064d: c422 jmp $0622
064f: 74f3 call $03F3
0651: c41d jmp $061D
0653: 23fd mov a,#$FD
0655: 7433 call $0333
0657: c422 jmp $0622
0659: bc02 mov r4,#$2
065b: c4fd jmp $06FD
065d: bc03 mov r4,#$3
065f: c4fd jmp $06FD
0661: 23ef mov a,#$EF
0663: 7433 call $0333
0665: 8a20 orl p2,#$20
0667: 9aef anl p2,#$EF
0669: b900 mov r1,#$0
066b: 3496 call $0196
066d: 4421 jmp $0221
066f: 0498 jmp $0098
0671: 0486 jmp $0086
0673: 85 clr f0
0674: be00 mov r6,#$0
0676: 0498 jmp $0098
0678: c4c1 jmp $06C1
067a: c47c jmp $067C
067c: 3479 call $0179
067e: 74f3 call $03F3
0680: b843 mov r0,#$43
0682: 10 inc @r0
0683: f0 mov a,@r0
0684: bc04 mov r4,#$4
0686: bbfa mov r3,#$FA
0688: 74b6 call $03B6 ; label_03b6_wait_r3:(250)
068a: ec86 djnz r4,$0686
068c: 07 dec a
068d: 9684 jnz $0684
068f: 97 clr c
0690: b805 mov r0,#$5
0692: ad mov r5,a
0693: be02 mov r6,#$2
0695: 3483 call $0183
0697: b93a mov r1,#$3A
0699: f1 mov a,@r1
069a: 12a7 jb0 $06A7
069c: fd mov a,r5
069d: 0301 add a,#$1
069f: f6a9 jc $06A9
06a1: bb01 mov r3,#$1
06a3: 74b6 call $03B6 ; label_03b6_wait_r3:(1)
06a5: c490 jmp $0690
06a7: 74f3 call $03F3
06a9: be00 mov r6,#$0
06ab: b843 mov r0,#$43
06ad: fd mov a,r5
06ae: 5307 anl a,#$7
06b0: a0 mov @r0,a
06b1: 97 clr c
06b2: 0486 jmp $0086
06b4: 3479 call $0179
06b6: b820 mov r0,#$20
06b8: b073 mov @r0,#$73
06ba: b838 mov r0,#$38 ; "8"
06bc: be02 mov r6,#$2
06be: 3483 call $0183
06c0: 83 ret
06c1: 3479 call $0179
06c3: bbff mov r3,#$FF
06c5: 74b6 call $03B6 ; label_03b6_wait_r3:(255)
06c7: bbff mov r3,#$FF
06c9: 74b6 call $03B6 ; label_03b6_wait_r3:(255)
06cb: b909 mov r1,#$9
06cd: bc0a mov r4,#$A
06cf: 2300 mov a,#$0
06d1: 69 add a,r1
06d2: e3 movp3 a,@a
06d3: bb06 mov r3,#$6
06d5: b825 mov r0,#$25
06d7: a0 mov @r0,a
06d8: c8 dec r0
06d9: ebd7 djnz r3,$06D7
06db: bbff mov r3,#$FF
06dd: 74b6 call $03B6 ; label_03b6_wait_r3:(255)
06df: bbff mov r3,#$FF ; label_03b6_wait_r3:(255)
06e1: 74b6 call $03B6
06e3: c9 dec r1
06e4: eccf djnz r4,$06CF
06e6: be00 mov r6,#$0
06e8: 0486 jmp $0086
06ea: be00 mov r6,#$0
06ec: 85 clr f0
06ed: 95 cpl f0
06ee: b836 mov r0,#$36 ; "6"
06f0: 3483 call $0183
06f2: b837 mov r0,#$37 ; "7"
06f4: be02 mov r6,#$2
06f6: 3483 call $0183
06f8: b820 mov r0,#$20
06fa: b077 mov @r0,#$77
06fc: 83 ret
06fd: 3479 call $0179
06ff: 97 clr c
0700: 85 clr f0
0701: a5 clr f1
0702: b820 mov r0,#$20
0704: b071 mov @r0,#$71
0706: b804 mov r0,#$4
0708: be02 mov r6,#$2
070a: 3483 call $0183
070c: 0486 jmp $0086
070e: 3479 call $0179
0710: 74f3 call $03F3
0712: b820 mov r0,#$20
0714: b01c mov @r0,#$1C
0716: 27 clr a
0717: 740a call $030A
0719: 99bf anl p1,#$BF
071b: 8980 orl p1,#$80
071d: b83a mov r0,#$3A
071f: f0 mov a,@r0
0720: 1278 jb0 $0778
0722: 09 in a,p1
0723: f21d jb7 $071D
0725: 27 clr a
0726: a9 mov r1,a
0727: ad mov r5,a
0728: b808 mov r0,#$8
072a: f47c call $077C
072c: 7671 jf1 $0771
072e: f4d0 call $07D0
0730: f8 mov a,r0
0731: d308 xrl a,#$8
0733: 962a jnz $072A
0735: b83a mov r0,#$3A
0737: f0 mov a,@r0
0738: 1278 jb0 $0778
073a: b808 mov r0,#$8
073c: f9 mov a,r1
073d: 962a jnz $072A
073f: b83b mov r0,#$3B
0741: f0 mov a,@r0
0742: f246 jb7 $0746
0744: e464 jmp $0764
0746: 2380 mov a,#$80
0748: 740a call $030A
074a: 27 clr a
074b: a9 mov r1,a
074c: ad mov r5,a
074d: b808 mov r0,#$8
074f: f47c call $077C
0751: 7674 jf1 $0774
0753: f4d0 call $07D0
0755: f8 mov a,r0
0756: d308 xrl a,#$8
0758: 964f jnz $074F
075a: b83a mov r0,#$3A
075c: f0 mov a,@r0
075d: 1278 jb0 $0778
075f: b808 mov r0,#$8
0761: f9 mov a,r1
0762: 964f jnz $074F
0764: 3479 call $0179
0766: b820 mov r0,#$20
0768: b05c mov @r0,#$5C
076a: 97 clr c
076b: 85 clr f0
076c: a5 clr f1
076d: be00 mov r6,#$0
076f: 0486 jmp $0086
0771: f9 mov a,r1
0772: c61d jz $071D
0774: bc07 mov r4,#$7
0776: c4fd jmp $06FD
0778: 74f3 call $03F3
077a: e464 jmp $0764
077c: 27 clr a
077d: aa mov r2,a
077e: ab mov r3,a
077f: 97 clr c
0780: 85 clr f0
0781: a5 clr f1
0782: 8980 orl p1,#$80
0784: 09 in a,p1
0785: f293 jb7 $0793
0787: fa mov a,r2
0788: 0301 add a,#$1
078a: f6c5 jc $07C5
078c: aa mov r2,a
; -- wait for 100 ms
078d: bc64 mov r4,#$64 ; 100
078f: f4c7 call $07C7 ; -- call COMMAND_VZG_03:
0791: e484 jmp $0784
; -- wait for 200 ms
0793: bcc8 mov r4,#$C8 ; 200
0795: f4c7 call $07C7 ; -- call COMMAND_VZG_03:
0797: 09 in a,p1
0798: f29c jb7 $079C
079a: e487 jmp $0787
; -- wait for 100 ms
079c: bc64 mov r4,#$64 ; 100
079e: f4c7 call $07C7 ; -- call COMMAND_VZG_03:
07a0: 09 in a,p1
07a1: f2bd jb7 $07BD
; -- wait for 200 ms
07a3: bcc8 mov r4,#$C8 ; 200
07a5: f4c7 call $07C7 ; -- call COMMAND_VZG_03:
07a7: 09 in a,p1
07a8: f2bd jb7 $07BD
07aa: fa mov a,r2
07ab: 03fd add a,#$FD
07ad: e6c5 jnc $07C5
07af: 97 clr c
07b0: fb mov a,r3
07b1: 03fd add a,#$FD
07b3: e6c5 jnc $07C5
07b5: 97 clr c
07b6: fa mov a,r2
07b7: 37 cpl a
07b8: 6b add a,r3
07b9: e6bc jnc $07BC
07bb: 95 cpl f0
07bc: 83 ret
;
; -- ANZ 02.000 Akku-Inhalt anzeigen. ???
;
07bd: fb mov a,r3
07be: 0301 add a,#$1
07c0: f6c5 jc $07C5
07c2: ab mov r3,a
07c3: e49c jmp $079C
07c5: b5 cpl f1
07c6: 83 ret
;
; -- VZG 03.nnn Verzögern um nnn Millisekunden.
;
; Input: r4 - number of milliseconds to wait
;
; With CPU with 6 MHz, this is 6 000 000 instructions per one second
;
; In 0.001 sec -> 6 000 000 NOP's
; In 1 sec -> 6 000 NOP's / div 6000
; In 1/6000 sec -> 1 NOP
; So 1 NOP takes 1/6000 sec to execute
; So 6 NOP's are 6 * 1/6000 sec = 6/6000 = 0.001 sec = 1 millisec
;
; So 1 millisec is 6 NOP's
;
COMMAND_VZG_03:
07c7: 00 nop ; 1. no operation
07c8: 00 nop ; 2. no operation
07c9: 00 nop ; 3. no operation
07ca: 00 nop ; 4. no operation
07cb: 00 nop ; 5. no operation
07cc: 00 nop ; 6. no operation. After the 6th NOP the CPU passed 1 milli second
07cd: ecc7 djnz r4,$07C7 ; decrement jump if r4 is not zero to COMMAND_VZG_03:
07cf: 83 ret ; return
07d0: 97 clr c
07d1: b6de jf0 $07DE
07d3: fd mov a,r5
07d4: 67 rrc a ; rotate right through carry
07d5: ad mov r5,a
07d6: e8dd djnz r0,$07DD
07d8: fd mov a,r5
07d9: 91 movx @r1,a
07da: c9 dec r1
07db: b808 mov r0,#$8
07dd: 83 ret
07de: a7 cpl c
07df: e4d3 jmp $07D3
07e1: 23df mov a,#$DF
07e3: 7433 call $0333
07e5: 83 ret
07e6: 2320 mov a,#$20 ; 0x20: 0100'0000 bin
07e8: 742e call $032E
07ea: 83 ret
; Umwandlung binär nach dezimal?
; input: a (Akku)
label_07eb:
07eb: ab mov r3,a
07ec: 2300 mov a,#$0
07ee: 6b add a,r3
07ef: e3 movp3 a,@a
07f0: ab mov r3,a
07f1: fe mov a,r6
07f2: 0320 add a,#$20 ; 32 dec
07f4: 17 inc a
07f5: a8 mov r0,a
07f6: fb mov a,r3
07f7: a0 mov @r0,a
07f8: 1e inc r6
07f9: 83 ret
07fa: 6d add a,r5
07fb: d6 .db 0xd6
07fc: 78 addc a,r0
07fd: eb00 djnz r3,$0700
07ff: 02 outl bus,a
; eof
View Comments
Halllo Michael
Danke fuer Deine Nachricht auf retrozone.ch! Freut mich zu sehen, dass ich nicht der einzige Irre bin, der das Kosmos-CP1 ROM disassembliert :-) Fuer meinen Emulator (https://github.com/asig/kosmos-cp1) habe ich das ROM ebenfalls unter die Lupe geommen. Das komplette "kommentierte ROM-Listing" findest Du hier: https://github.com/asig/kosmos-cp1/blob/master/cp1.asm