Kosmos CP-1 Computer-Praxis
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
Helpful?
Let us know if you liked the post. That’s the only way we can improve.
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