Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » der Poly880 » Themenansicht

Autor Thread - Seiten: -1-
000
16.11.2014, 16:27 Uhr
sas



Ich habe die Woche wieder mal Spaß mit einem Poly880 gehabt(
Kalte Lötstelle Taste 2 und 4, Netzteil Sicherungshalterung nur Grün.
Und Kondensator.

In diesem befindet sich im letzten Steckplatz ein EPROM.
Ich habe diesen ausgelesen, und rfm betrieben, und den Inhalt
Invertiert um diesen zu Dissassemblieren.
Ich habe viele Testroutinen gefunden die ähnlich der Routinen
in den Handbücher zum Poly880 sind.
Auffällig ist das die Routinen für den Adressbereich 0x4000 geschrieben
sind, s. Absolute Sprünge und Zugriffe.
Auch habe ich eine Testroutine für den Fernschreiberanschluß gefunden.
Leider sind die PIO Adressen nicht wirklich zu zuordnen.
Ich lege mal zum allg. Amüsieren den Code hier unten an,
vielleicht erkennt jemand "seinen" Code und kann mehr dazu sagen?
------------------------------------------
// Programm muß auf den RAM Bereich kopiert werden:
// FCT 2: 4000; 3000; 0399
// GO 4000
///
// Programmeinsprünge:
// 4000
// 4180 Fernschreibmaschinen-Eingabe/Lochstreifenleser
// 41f0 Fernschreibmaschinen-Drucker Prüftext
// 4290 7-Segm. LED Testausgabe
// 42f0 Tastaturtest
//
// Interrupt 2 Routinen:
// 40cf
// 40ef
// 41b0
// 432f
// 436b
//
// Adressen im ROM; nach dem Kopieren sind diese in 4xxx zu finden!

// PIO Adressen:
// PIO I2
// 80 (90, C0, D0) Datenadresse 7-Seg. Anzeige
// 81 (91, C1, D1) Steueradresse
// 82 (92, C2, D2) Datenadresse
// 83 (93, C3, D3) Steueradresse
//
// PIO I3 (Spiegelung)
// 84 (94, C4, D4) Datenadresse System
// 85 (95, C5, D5) Steueradresse
// 86 (96, C6, D6) Datenadresse
// 87 (97, C7, D7) Steueradresse
//
// CTC (Spiegelung)
// 88 (98, C8, D8) CTC Systemkanal
// 89 (99, C9, D9)
// 8A (9A, CA, DA)
// 8B (9B, CB, DB)
//
// A0 Digittreiber Adresse
// - BF
// E0
// - FF

// P // Programm
RAM ROM3
4000 3000 F3 DI
4001 3001 ED 5E IM 2
4003 3003 3E 40 LD A,0x40 // Int-Vektor 0x40
4005 3005 ED 47 LD I,A
4007 3007 18 0F JR 0x3018 // Weiter in 0x3018

// PIO Initialisierungsdaten:
4009 3009 00 14 CF 10 97 EF 16
4010 3010 CF F8 97 07 CF 40 EF 40 // Int. Adressen 0x40cf; 0x40ef

// Einsprung aus Startroutine 0x3000
4018 3018 21 0A 40 LD HL,0x400A //
401B 301B 0E BE LD C,0xBE
401D 301D 06 05 LD B,0x05 // BC = 0x05be
401F 301F ED B3 OTIR // Ausgabe PIO?, 5 Elemente von 0x400a bis 0x400f, Port 0xBE
4021 3021 21 0F 40 LD HL,0x400F //
4024 3024 0E BF LD C,0xBF
4026 3026 06 05 LD B,0x05
4028 3028 ED B3 OTIR // Ausgabe PIO?, 5 Elemente
402A 302A 06 06 LD B,0x06
402C 302C 21 DC 43 LD HL,0x43DC // LED Anzeigespeicher
402F 302F 3E F5 LD A,0xF5
4031 3031 77 LD (HL),A // lege in 0x43DC bis 043e1: 0xf5 ab; "AAAAAA"
4032 3032 3E 00 LD A,0x00
4034 3034 2C INC L
4035 3035 10 FA DJNZ 0x3031 // Schleife 6 Runden
4037 3037 3E D4 LD A,0xD4
4039 3039 0E 04 LD C,0x04
403B 303B 18 2A JR 0x3067 // ab 0x3067 weiter

// Einsprung wenn A = 0, Retour-Schleife
403D 303D 7E LD A,(HL) // Lade A mit M
403E 303E D3 BD OUT (0xBD),A // Gebe auf Ausgabe PIO? den Wert M aus
4040 3040 11 04 00 LD DE,0x0004 // Counter
4043 3043 E5 PUSH HL
// Schleife DE
4044 3044 D5 PUSH DE // IY = ANZBER
4045 3045 CD 4B 01 CALL 0x014B // TASTU (ANZBER ... +7) Rückgabe: Z, A, C
4048 3048 20 1D JR NZ,0x3067 // Rückgabe Flag Z != 0 springe
404A 304A D1 POP DE // Counter zurückholen
404B 304B 1B DEC DE // --Counter
404C 304C 7B LD A,E
404D 304D B2 OR D
404E 304E 20 F4 JR NZ,0x3044 // DE != 0?
4050 3050 3E FF LD A,0xFF
4052 3052 D3 BD OUT (0xBD),A // Ausgabe PIO?
4054 3054 00 NOP // Warte, für Interrupt?
4055 3055 11 04 00 LD DE,0x0004
// Schleife DE
4058 3058 D5 PUSH DE
4059 3059 CD 4B 01 CALL 0x014B // TASTU (ANZBER ... +7) Rückgabe: Z, A, C
405C 305C 20 09 JR NZ,0x3067 // Rückgabe Flag Z != 0 springe
405E 305E D1 POP DE // Counter zurückholen
405F 305F 1B DEC DE // --Counter
4060 3060 7B LD A,E
4061 3061 B2 OR D
4062 3062 20 F4 JR NZ,0x3058 // DE != 0?
4064 3064 E1 POP HL
4065 3065 18 D6 JR 0x303D // weiter in 0x303d

// Einsprung:
4067 3067 FE 00 CP 0x00 // A == 0; keine Taste
4069 3069 28 D2 JR Z,0x303D // Ja Springe
406B 306B CB 47 BIT 0,A // Auswertung Taste: 0x11 MEM; 0x21 GO; 0x41 EXEC; 0x51 BACK; 0x61 REG; 0x71 FCT; 0x81 STEP
406D 306D 20 39 JR NZ,0x30A8 // keine weißen Fkt. Tasten
406F 306F 06 00 LD B,0x00
4071 3071 CB 51 BIT 2,C // Zifferntaste?
4073 3073 20 12 JR NZ,0x3087 // keine Zifferntaste?
4075 3075 21 3F 40 LD HL,0x403F // Programm Manipulation
4078 3078 36 BC LD (HL),0xBC // lege in M 0xbc ab; Verbiege PIO Adresse
407A 307A 21 53 40 LD HL,0x4053 // Programm Manipulation
407D 307D 36 BC LD (HL),0xBC // lege in M 0xbc ab; Verbiege PIO Adresse
407F 307F 21 DE 43 LD HL,0x43DE // LED Anzeigespeicher Position 3
4082 3082 3E F5 LD A,0xF5
4084 3084 77 LD (HL),A // lege in M 0xf5 ab
4085 3085 18 10 JR 0x3097 // weiter in 0x3097
// keine Zifferntaste
4087 3087 21 3F 40 LD HL,0x403F // Programm Manipulation
408A 308A 36 BD LD (HL),0xBD // lege in M 0xbd ab; Verbiege PIO Adresse
408C 308C 21 53 40 LD HL,0x4053 // Programm Manipulation
408F 308F 36 BD LD (HL),0xBD // lege in M 0xbd ab; Verbiege PIO Adresse
4091 3091 21 DE 43 LD HL,0x43DE // LED Anzeigespeicher Position 3
4094 3094 3E 57 LD A,0x57
4096 3096 77 LD (HL),A // lege in M 0x57 ab
// weiter
4097 3097 21 10 03 LD HL,0x0310 // Anzeigetabelle 0x0 ... 0xf
409A 309A 09 ADD HL,BC // BC = 0x00xx = Taste
409B 309B 7E LD A,(HL) // hole 7-Seg-Kode
409C 309C 21 DF 43 LD HL,0x43DF // LED Anzeigespeicher Position 4
409F 309F 77 LD (HL),A // hole Kode Anzeige RAM
40A0 30A0 21 70 41 LD HL,0x4170 // DB
40A3 30A3 09 ADD HL,BC // 0x3170 + 00xx Tastenkode
40A4 30A4 D1 POP DE
40A5 30A5 D1 POP DE
40A6 30A6 18 95 JR 0x303D // Retour
// Keine weiße Fkt.Taste
40A8 30A8 06 06 LD B,0x06 // 6 Runden - 6 Anzeigen aktualisieren
40AA 30AA 21 DC 43 LD HL,0x43DC // LED Anzeigespeicher
40AD 30AD 3E 73 LD A,0x73
// Schleife 7 Runden
40AF 30AF 77 LD (HL),A
40B0 30B0 3E 00 LD A,0x0
40B2 30B2 2C INC L
40B3 30B3 10 FA DJNZ 0x30AF // Schleife
40B5 30B5 06 07 LD B,0x07 // 7 Runden
40B7 30B7 21 50 43 LD HL,0x4350 //
40BA 30BA 3E 00 LD A,0x00
// Schleife
40BC 30BC 77 LD (HL),A
40BD 30BD 2C INC L
40BE 30BE 10 FC DJNZ 0x30BC // Schleife
40C0 30C0 3E F7 LD A,0xF7
40C2 30C2 D3 BC OUT (0xBC),A // Ausgabe PIO?
40C4 30C4 3E FF LD A,0xFF
40C6 30C6 D3 BD OUT (0xBD),A // Ausgabe PIO?
40C8 30C8 F3 DI // Sperre Interrupt
40C9 30C9 CD 4B 01 CALL 0x014B // TASTU (ANZBER ... +7) Rückgabe: Z, A, C
40CC 30CC FB EI
40CD 30CD 28 F9 JR Z,0x30C8 // Warte auf Tasteneingabe
// Interruptroutine
40CF 30CF F3 DI
40D0 30D0 DB BC IN A,(0xBC) // Lese Input PIO?
40D2 30D2 CB 67 BIT 4,A
40D4 30D4 4F LD C,A
40D5 30D5 21 DD 43 LD HL,0x43DD // LED Anzeigespeicher Position 2
40D8 30D8 FE 10 CP 10H
40DA 30DA 20 05 JR NZ,0x30E1
40DC 30DC 06 71 LD B,0x71
40DE 30DE 70 LD (HL),B
40DF 30DF 18 0B JR 0x30EC // EI, Return
// Einsprung
40E1 30E1 E5 PUSH HL
40E2 30E2 21 51 43 LD HL,0x4351
40E5 30E5 7E LD A,(HL)
40E6 30E6 3C INC A
40E7 30E7 77 LD (HL),A
40E8 30E8 E1 POP HL
40E9 30E9 CD 5A 41 CALL 0x415A //
40EC 30EC FB EI // Erlaube Interrupt
40ED 30ED ED 4D RETI // Return Interrupt

// Interruptroutine
40EF 30EF F3 DI
40F0 30F0 DB BD IN A,(0xBD) // Lese PIO?
40F2 30F2 2F CPL
40F3 30F3 4F LD C,A
40F4 30F4 CD 67 41 CALL 0x4167 // Warteschleife 30ms 0x0400
40F7 30F7 DB BD IN A,(0xBD) // Lese PIO?
40F9 30F9 2F CPL
40FA 30FA B1 OR C // Entprellen?
40FB 30FB 4F LD C,A
40FC 30FC CB 59 BIT 3,C
40FE 30FE 28 0C JR Z,0x310C
4100 3100 21 52 43 LD HL,0x4352 //
4103 3103 7E LD A,(HL)
4104 3104 3C INC A
4105 3105 77 LD (HL),A
4106 3106 21 DE 43 LD HL,0x43DE // LED Anzeigespeicher Position 3
4109 3109 CD 5A 41 CALL 0x415A // Übergabe A , HL; Rückgabe 7-SegmentKode in M
410C 310C CB 61 BIT 4,C
410E 310E 28 0C JR Z,0x311C
4110 3110 21 53 43 LD HL,0x4353 //
4113 3113 7E LD A,(HL)
4114 3114 3C INC A
4115 3115 77 LD (HL),A
4116 3116 21 DF 43 LD HL,0x43DF // LED Anzeigespeicher Position 4
4119 3119 CD 5A 41 CALL 0x415A // Übergabe A , HL; Rückgabe 7-SegmentKode in M
411C 311C CB 69 BIT 5,C
411E 311E 28 0C JR Z,0x312C
4120 3120 21 54 43 LD HL,0x4354 //
4123 3123 7E LD A,(HL)
4124 3124 3C INC A
4125 3125 77 LD (HL),A
4126 3126 21 E0 43 LD HL,0x43E0 // LED Anzeigespeicher Position 5
4129 3129 CD 5A 41 CALL 0x415A // Übergabe A , HL; Rückgabe 7-SegmentKode in M
412C 312C CB 71 BIT 6,C
412E 312E 28 0C JR Z,0x313C
4130 3130 21 55 43 LD HL,0x4355 //
4133 3133 7E LD A,(HL)
4134 3134 3C INC A
4135 3135 77 LD (HL),A
4136 3136 21 E1 43 LD HL,0x43E1 // LED Anzeigespeicher Position 6
4139 3139 CD 5A 41 CALL 0x415A // Übergabe A , HL; Rückgabe 7-SegmentKode in M
413C 313C CB 79 BIT 7,C
413E 313E 28 0C JR Z,0x314C
4140 3140 21 56 43 LD HL,0x4356 //
4143 3143 7E LD A,(HL)
4144 3144 3C INC A
4145 3145 77 LD (HL),A
4146 3146 21 E2 43 LD HL,0x43E2 // LED Anzeigespeicher Position 7
4149 3149 CD 5A 41 CALL 0x415A // Übergabe A , HL; Rückgabe 7-SegmentKode in M
414C 314C 3E 07 LD A,0x07
414E 314E A1 AND C
414F 314F 28 06 JR Z,0x3157
4151 3151 21 E3 43 LD HL,0x43E3 // LED Anzeigespeicher Position 8
4154 3154 06 71 LD B,0x71
4156 3156 70 LD (HL),B
4157 3157 FB EI // Interrupt Freigabe
4158 3158 ED 4D RETI // Return Interrupt

// Subroutine; Übergabe A , HL; Rückgabe 7-SegmentKode in M
415A 315A E5 PUSH HL
415B 315B 21 10 03 LD HL,0x0310 // 7-Seg. Tabelle
415E 315E 06 0F LD B,0x0F
4160 3160 A0 AND B // Flag löschen
4161 3161 85 ADD A,L // 0x10 + A
4162 3162 6F LD L,A
4163 3163 46 LD B,(HL) // B = 7-Segment-Kode
4164 3164 E1 POP HL
4165 3165 70 LD (HL),B
4166 3166 C9 RET

// Warteschleife 30ms 0x0400
4167 3167 11 00 04 LD DE,0x0400
416A 316A 1B DEC DE
416B 316B 7B LD A,E
416C 316C B2 OR D
416D 316D 20 FB JR NZ,0x316A
416F 316F C9 RET

// DB für Berechnung Tastencode
4170 3170 FE FD DF 9F FE FD FB

4177 3177 FF FF FF FF FF FF FF FF FF

// Programm Eingabe über Fernschreibmaschine/Lochstreifensender
4180 3180 F3 DI
4181 3181 ED 5E IM 2
4183 3183 3E 41 LD A,0x41 // Interruptvektor 0x41
4185 3185 ED 47 LD I,A
4187 3187 18 03 JR 0x318C

// Daten
4189 3189 00 B9 41 // Interruptadresse 0x41b9

// Einsprung
418C 318C 3E 8A LD A,0x8A
418E 318E D3 BE OUT (0xBE),A // Ausgabe PIO?
4190 3190 3E CF LD A,0xCF
4192 3192 D3 BE OUT (0xBE),A // Ausgabe PIO?
4194 3194 3E 10 LD A,0x10
4196 3196 D3 BE OUT (0xBE),A // Ausgabe PIO?
4198 3198 11 FF F0 LD DE,0xF0FF
419B 319B CD E2 41 CALL 0x41E2 // Zeitschleife DE ca 1,6s
419E 319E 11 FF F0 LD DE,0xF0FF
41A1 31A1 CD E2 41 CALL 0x41E2 // Zeitschleife DE ca 1,6s
41A4 31A4 3E 97 LD A,0x97
41A6 31A6 D3 BE OUT (0xBE),A // Ausgabe PIO?
41A8 31A8 3E EF LD A,0xEF
41AA 31AA D3 BE OUT (0xBE),A // Ausgabe PIO?
41AC 31AC 3E F7 LD A,0xF7
41AE 31AE D3 BC OUT (0xBC),A // Ausgabe PIO?
// Interrupt-Einsprung
41B0 31B0 F3 DI
41B1 31B1 CD 4B 01 CALL 0x014B // TASTU (ANZBER ... +7) Rückgabe: Z, A, C
41B4 31B4 FB EI
41B5 31B5 C3 B0 41 JP 0x41B0
41B8 31B8 00 NOP
41B9 31B9 21 DC 43 LD HL,0x43DC // LED Anzeigespeicher
41BC 31BC 11 62 01 LD DE,0x0162
41BF 31BF CD E2 41 CALL 0x41E2 // Zeitschleife 10ms DE
41C2 31C2 06 05 LD B,0x5
// Schleife 5 Runden
41C4 31C4 DB BC IN A,(0xBC) // Lese PIO?
41C6 31C6 CB 67 BIT 4,A
41C8 31C8 37 SCF
41C9 31C9 20 01 JR NZ,0x31CC
41CB 31CB 3F CCF
41CC 31CC 0E 00 LD C,0x00
41CE 31CE CB 19 RR C
41D0 31D0 71 LD (HL),C // Lösche Anzeigespeicher erste Position
41D1 31D1 2C INC L
41D2 31D2 CD DF 41 CALL 0x41DF // Zeitschleife 10ms 0x0162
41D5 31D5 10 ED DJNZ 0x31C4 // 5 Runden
41D7 31D7 0E 00 LD C,0x00
41D9 31D9 71 LD (HL),C
41DA 31DA 2C INC L
41DB 31DB 71 LD (HL),C
41DC 31DC FB EI
41DD 31DD ED 4D RETI

// Subroutine, Zeitschleife 10ms 0x0162
41DF 31DF 11 62 01 LD DE,0x0162
// Subroutine, Zeitschleife DE
41E2 31E2 1B DEC DE
41E3 31E3 7B LD A,E
41E4 31E4 B2 OR D
41E5 31E5 20 FB JR NZ,0x31E2
41E7 31E7 C9 RET

41E8 31E8 FF FF FF FF FF FF FF FF

// Programm Ausgabe als Fernschreibzeichen
41F0 31F0 F3 DI
41F1 31F1 ED 5E IM 2
41F3 31F3 18 08 JR 0x31FD // weiter mit 0x31fd

// Erweiterungs-PIO Initialisierung
41F5 31F5 CF 10 97 EF CF F8 97 07

// Einsprung aus Start Routine 0x31f0
41FD 31FD 21 F5 41 LD HL,0x41F5 //
4200 3200 0E BE LD C,0xBE
4202 3202 06 04 LD B,0x04
4204 3204 ED B3 OTIR // PIO? Initialisierung
4206 3206 21 F9 41 LD HL,0x41F9 //
4209 3209 0E BF LD C,0xBF
420B 320B 06 04 LD B,0x04
420D 320D ED B3 OTIR // PIO? Initialisierung
420F 320F 21 3C 42 LD HL,0x423C //
// Schleife
4212 3212 4E LD C,(HL)
4213 3213 79 LD A,C
4214 3214 FE 40 CP 0x40
4216 3216 CA 0F 42 JP Z,0x420F // Schleife Finde 0x40
4219 3219 CB 21 SLA C // c <- C7 <- C0 <- 0
421B 321B CB F1 SET 6,C // Stop 5 4 3 2 1 Start
421D 321D CB F9 SET 7,C // C = 1 1 C4 C3 C2 C1 C0 0
421F 321F 06 08 LD B,0x08 // Schleife 8 Runden
4221 3221 3E FF LD A,0xFF
4223 3223 CB 09 RRC C // Rotiere C7 > C0 > c; C0 > C7
4225 3225 30 02 JR NC,0x3229 // Carry != 0; A = 0xff
4227 3227 3E DF LD A,0xDF // Wert geladen bei Carry = 1
4229 3229 D3 BC OUT (0xBC),A // Ausgabe PIO? 0xff oder oxdf
422B 322B CD 33 42 CALL 0x4233 // Warteschleife Warteschleife 0x0162 = 10ms
422E 322E 10 F1 DJNZ 0x3221 // Schleife 8 Runden
4230 3230 2C INC L
4231 3231 18 DF JR 0x3212 // Schleife

// Subroutine, Warteschleife 0x0162; 100bd ca. 10ms
4233 3233 11 62 01 LD DE,0x0162
4/ S // Schleife
4236 3236 1B DEC DE
4237 3237 7B LD A,E
4238 3238 B2 OR D
4239 3239 20 FB JR NZ,0x3236 // Schleife bis DE 0x0000
423B 323B C9 RET

// Datenbereich; Wandlung Zeichen in CCITT-2
423C 323C 1B 08 02 0B // Ziff WR Zl klingel
4240 3240 04 1F 0F 03 07 0D 01 0C 04 05 06 01 04 0B 01 09 // _LAT KAUFEN_SIE_JED
4250 3250 01 04 13 18 0E 14 01 04 1E 06 01 0A 04 19 01 17 // E_WOCHE_VIER_BEQ
4260 3260 07 01 1C 01 04 12 01 06 0E 14 10 01 04 16 01 12 // UEME_LEICHTE_PEL
4270 3270 11 01 04 1B 0B 04 17 13 01 0A 10 15 07 06 18 16 // ZE Ziff klingel_1234567890
4280 3280 04 0B 0B 40 // _klingel klingel // Ende

4284 3284 FF FF FF FF FF FF FF FF FF FF FF FF

// Testprogramm 7-Seg-LED?
4290 3290 F3 DI
4291 3291 3E 0F LD A,0x0F
4293 3293 D3 7F OUT (0x7F),A // PIO-Erweiterungskarte
// Schleife 3 Runden
4295 3295 0E 00 LD C,0x00 // 0x3f, 0x5f
// Retoureinsprung
4297 3297 06 10 LD B,0x10 // Schleife 16 Runden
4299 3299 DD 21 C7 42 LD IX,0x42C7 // Datablock
// Schleife 10 Runden
429D 329D DD 7E 00 LD A,(IX+0x00) // 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16// HEX
42A0 32A0 81 ADD A,C // 09,04, 00, 09, 02, 02, 08, 00, 08, 08, 03, 06, 01, 06, 0e, 0f
42A1 32A1 D3 7D OUT (0x7D),A // PIO-Erweiterungskarte
42A3 32A3 DD 7E 01 LD A,(IX+0x01) // 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16// HEX
42A6 32A6 81 ADD A,C // 17,1c, 15, 11, 11, 10, 17, 10, 11, 10, 10, 12, 14, 10, 10, 1f
42A7 32A7 D3 7D OUT (0x7D),A // PIO-Erweiterungskarte
42A9 32A9 CD BE 42 CALL 0x42BE // Warteschleife 0x2000 = 1,5s
42AC 32AC DD 23 INC IX
42AE 32AE DD 23 INC IX // 42c9;42cb;42cd;42cf;42d1;42d3;
42B0 32B0 10 EB DJNZ 0x329D // Schleife 16 Runden
42B2 32B2 3E 20 LD A,0x20
42B4 32B4 81 ADD A,C // 0x3f
42B5 32B5 4F LD C,A
42B6 32B6 D6 80 SUB 0x80
42B8 32B8 CA 95 42 JP Z,0x4295 // Schleife 3 Runden
42BB 32BB C3 97 42 JP 0x4297 // Schleife neustart

// Subroutine, Warteschleife 0x2000 = 1,5s
42BE 32BE 11 00 20 LD DE,0x2000
42C1 32C1 1B DEC DE
42C2 32C2 7B LD A,E
42C3 32C3 B2 OR D
42C4 32C4 20 FB JR NZ,0x32C1
42C6 32C6 C9 RET

//Datenbereich für IX
42C7 32C7 09 17 04 1C 00 15 09 11 02
42d0 32d0 11 02 10 08 17 00 10 08 11 08 10 03 10 06 12 01
42e0 32e0 14 06 10 0E 10 0F 1F

42E7 32E7 FF FF FF FF FF FF FF FF FF

Programm Tastaturtest
42F0 32F0 F3 DI
42F1 32F1 ED 5E IM 2
42F3 32F3 3E 42 LD A,0x42 // Interrupt Vektor 0x42
42F5 32F5 ED 47 LD I,A
42F7 32F7 18 10 JR 0x3309

// Databereich
42F9 32F9 00 2F 43 6B 43 // Int: 432f; 436b
42fe 32fe 00
43ff 33ff FA CF FF B7 00 // PIO ?? 0x7e
4304 3304 FC CF FF 97 FE // PIO I3 0x85

// Einsprung
4309 3309 21 FF 42 LD HL,0x42ff //
430C 330C 0E 7E LD C,0x7E
430E 330E 06 05 LD B,0x05
4310 3310 ED B3 OTIR // Initialisierung PIO
4312 3312 21 04 43 LD HL,0x4304 //
4315 3315 0E 85 LD C,0x85
4317 3317 06 05 LD B,0x05
4319 3319 ED B3 OTIR // Initialisierung PIO I3
431B 331B 06 06 LD B,0x06 // Schleifenzähler
431D 331D 21 DC 43 LD HL,0x43DC // LED Anzeigespeicher
4320 3320 3E 73 LD A,0x73
Schleife 6 Runden
4322 3322 77 LD (HL),A // schreibe in Anzeige RAM 0x43dc = 0x73 0x043dd ... 0x4401 = 0x00
4323 3323 3E 00 LD A,0x00 // E _ _ _ _ _
4325 3325 2C INC L
4326 3326 10 FA DJNZ 0x3322 // Schleife 6 Runden
4328 3328 F3 DI
4329 3329 CD 4B 01 CALL 0x014B // TASTU (ANZBER ... +7) Rückgabe: Z, A, C
432C 332C FB EI
432D 332D 18 F9 JR 0x3328 // Endlosschleife; warte auf Interrupt von PIO

// Interruptroutine
432F 332F F3 DI
4330 3330 DB 7C IN A,(0x7C) // Lese Eingabe PIO
4332 3332 4F LD C,A
4333 3333 CD 83 43 CALL 0x4383 // Wartezeit 60ms 0x0800
4336 3336 DB 7C IN A,(0x7C)
4338 3338 B1 OR C
4339 3339 4F LD C,A // Entprellfunktion
433A 333A 21 8C 43 LD HL,0x438C //
433D 333D 11 10 03 LD DE,0x0310 // 7-Seg. Dekodertabelle
4340 3340 06 0A LD B,0x0A // Schleifenzähler
// Such-Schleife 10 Runden
4342 3342 4E LD C,(HL)
4343 3343 B9 CP C // Vergleiche Eingabe mit DB 0x438c
4344 3344 28 1C JR Z,0x3362 // Treffer, Anzeige des Wertes
4346 3346 23 INC HL
4347 3347 13 INC DE
4348 3348 10 F8 DJNZ 0x3342 // Schleife 10 Runden
434A 334A 06 71 LD B,0x71
434C 334C 4E LD C,(HL)
434D 334D B9 CP C
434E 334E 28 14 JR Z,0x3364 // Anzeige der Eingabe
4350 3350 06 73 LD B,0x73
4352 3352 23 INC HL
4353 3353 4E LD C,(HL)
4354 3354 B9 CP C
4355 3355 28 0D JR Z,0x3364 // Anzeige der Eingabe
4357 3357 06 43 LD B,0x43
4359 3359 23 INC HL
435A 335A 4E LD C,(HL)
435B 335B B9 CP C
435C 335C 28 06 JR Z,0x3364 // Anzeige der Eingabe
435E 335E 06 DD LD B,0xDD
4360 3360 18 02 JR 0x3364 // Anzeige H.

// Anzeige der Eingabe über 7-Seg. Tabelle
4362 3362 1A LD A,(DE)
4363 3363 47 LD B,A
// Anzeige der Eingabe
4364 3364 21 DD 43 LD HL,0x43DD // LED Anzeigespeicher Position 2
4367 3367 70 LD (HL),B
4368 3368 FB EI
4369 3369 ED 4D RETI

// Interruptroutine
436B 336B 21 FE 42 LD HL,0x42FE //
436E 336E 7E LD A,(HL) // A = 0
436F 336F 3C INC A
4370 3370 E6 0F AND 0x0F // Maskiere A
4372 3372 77 LD (HL),A // lege ++a in 0x42fe ab
4373 3373 11 10 03 LD DE,0x0310 // 7-Segment Kode
4376 3376 83 ADD A,E
4377 3377 5F LD E,A
4378 3378 1A LD A,(DE)
4379 3379 21 DF 43 LD HL,0x43DF // LED Anzeigespeicher Position 4
437C 337C 06 41 LD B,0x41
437E 337E 70 LD (HL),B // zeige "|" in Position 4
437F 337F 23 INC HL
4380 3380 77 LD (HL),A // Zeige Hexwert in Position 5
4381 3381 ED 4D RETI

// Subroutine: Wartezeit 60ms 0x0800
4383 3383 11 00 08 LD DE,0800H
4386 3386 1B DEC DE
4387 3387 7B LD A,E
4388 3388 B2 OR D
4389 3389 20 FB JR NZ,0x3386
438B 338B C9 RET

// Datenbereich für Suche PIO Input mit DB
438C 338C 01 02 30 50
4390 3390 04 60 71 08 90 A0 B2 C0 E4
4399 3399 FF FF FF
... ...
43FF 33FF FF
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
16.11.2014, 16:29 Uhr
sas



Die erste Adresse ist die eigentliche Adresse, die zweite die Adresse entsprechend dem
EPROM Steckplatz.
Den Code sollte man per FCT-2 in den RAM Kopieren.
Start 4000, Quelle 3000, Länge 0399
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
16.11.2014, 16:49 Uhr
felge1966
Default Group and Edit


Kannst du das alles mal als *.bin und *.txt ablegen?

Gruß Jörg
--
http://felgentreu.spdns.org/bilder/jacob120.gif
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
17.11.2014, 19:20 Uhr
sas



Hallo Felge, und Interessenten
bitte eMail angeben.

danke Jörg


Zitat:
felge1966 schrieb
Kannst du das alles mal als *.bin und *.txt ablegen?

Gruß Jörg

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
18.11.2014, 17:07 Uhr
sas



Hallo

Hier noch mein Zusatznetzteil das geringfügig vom handgezeichneten Zusatznetzteil aus dem Internet unterscheidet.

Der Stromlaufplan des Poly 880 ist zwar gut Dokumentiert.
Aber zu beiden Netzteilen findet man so gut wie gar nichts ...




Jörg
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek