Reischl
BIN
Reischl/img/z80-ce-wahr.png
Normal file
After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 397 KiB After Width: | Height: | Size: 312 KiB |
BIN
Reischl/img/z80-daisy.png
Normal file
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 262 KiB |
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 263 KiB |
BIN
Reischl/img/z80-digiview-pio-4.png
Normal file
After Width: | Height: | Size: 261 KiB |
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 171 KiB After Width: | Height: | Size: 248 KiB |
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 270 KiB |
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 273 KiB |
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 262 KiB |
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 258 KiB |
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 253 KiB |
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 272 KiB |
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 186 KiB |
BIN
Reischl/img/z80-eprom-timing.png
Normal file
After Width: | Height: | Size: 140 KiB |
BIN
Reischl/img/z80-netz.png
Normal file
After Width: | Height: | Size: 252 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 205 KiB |
BIN
Reischl/img/z80-reset-cpu-oszi.png
Normal file
After Width: | Height: | Size: 149 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 122 KiB |
BIN
Reischl/img/z80-reset.png
Normal file
After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 317 KiB |
BIN
Reischl/img/z80-spannung.png
Normal file
After Width: | Height: | Size: 189 KiB |
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 163 KiB |
Before Width: | Height: | Size: 187 KiB After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 128 KiB |
BIN
Reischl/img/z80-zeit.png
Normal file
After Width: | Height: | Size: 343 KiB |
109
Reischl/lst/CTC_BLINKY_Interrupt.lst
Normal file
|
@ -0,0 +1,109 @@
|
|||
1 ;******************************************************************************
|
||||
2 ;* Z80 Assembler program *
|
||||
3 ;* Josef Reisinger *
|
||||
4 ;* josef.reisinger@htl-hl.ac.at *
|
||||
5 ;* 26/04/2015 *
|
||||
6 ;******************************************************************************
|
||||
7
|
||||
8 ; ---------------------------- PIO 82C55 I/O ---------------------------------
|
||||
9 0080 PIO_A: EQU $80 ; (INPUT)
|
||||
10 0081 PIO_B: EQU $81 ; (OUTPUT) OUT TO LEDS
|
||||
11 0082 PIO_C: EQU $82 ; (INPUT) IN from DIP SWITCHES
|
||||
12 0083 PIO_CON: EQU $83 ; CONTROL BYTE PIO 82C55
|
||||
13
|
||||
14 ; --------------------------- CTC Z80 Timer Counter --------------------------
|
||||
15 0000 CTC0 EQU $00 ; Channel 0
|
||||
16 0001 CTC1 EQU $01 ; Channel 1
|
||||
17 0002 CTC2 EQU $02 ; Channel 2
|
||||
18 0003 CTC3 EQU $03 ; Channel 3
|
||||
19
|
||||
20 ; -------------------------- SIO (USART) ----------------------------------------
|
||||
21 0040 SIO_A_D: EQU $40 ; Channel A Data Register
|
||||
22 0041 SIO_B_D: EQU $41 ; Channel B Data Register
|
||||
23 0042 SIO_A_C: EQU $42 ; Channel A Control Register
|
||||
24 0043 SIO_B_C: EQU $43 ; Channel B Control Register
|
||||
25
|
||||
26
|
||||
27 ;-------------------------- CONSTANTS ----------------------------------------
|
||||
28 FFFF RAMTOP: EQU $FFFF ; 32Kb RAM 8000H-FFFFH
|
||||
29 8000 COUNTER: EQU $8000 ; RAM Counter
|
||||
30
|
||||
31
|
||||
32 ;******************************************************************************
|
||||
33 ;* RESET HANDLER *
|
||||
34 ;* Function: Initialize system and start Main Program *
|
||||
35 ;******************************************************************************
|
||||
36 0000 ORG $0000
|
||||
37 0000 F3 DI ; Disable interrupt
|
||||
38 0001 31 FF FF LD SP,RAMTOP ; Set stack pointer
|
||||
39 0004 C3 00 01 JP MAIN ; jump to Main program
|
||||
40
|
||||
41
|
||||
42 ;*******************************************************************
|
||||
43 ;* MAIN PROGRAM *
|
||||
44 ;*******************************************************************
|
||||
45 0100 ORG $0100
|
||||
46 0100 21 00 80 MAIN: LD HL,COUNTER ; Reset RAM Counter
|
||||
47 0103 3E 00 LD A,$00
|
||||
48 0105 77 LD (HL),A
|
||||
49
|
||||
50 ; ------------------ Initialize PIO ----------------
|
||||
51 0106 3E 99 LD A,$99 ; Initialize 8255: PA0-PA7=IN (DIP SWITCHES), PB0-PB7=OUT (LEDS),
|
||||
52 0108 D3 83 OUT (PIO_CON),A ; PC0-PC7=IN, Mode 0 Selection
|
||||
53
|
||||
54 ;------------------ Configure CTC -----------------------
|
||||
55 010A 3E A5 LD A,$A5 ; Configure CTC Channel 0: Interrupt, Timer Mode, Prescaler = 256,
|
||||
56 010C D3 00 OUT (CTC0),A ; trigger on positive edge, next word = time constant, Channel continuous result operation
|
||||
57 010E 3E FF LD A,$FF ; Write Time constant 255*256*552ns= 36,03ms
|
||||
58 0110 D3 00 OUT (CTC0),A
|
||||
59 0112 3E A8 LD A,$A8 ; Loading Interrupt Vector register
|
||||
60 0114 D3 00 OUT (CTC0),A ; trigger on positive edge, next word = time constant, Channel continuous result operation
|
||||
61
|
||||
62 ;---------------------- Configure Interrupt -----------------
|
||||
63 0116 3E 01 LD A,$01 ; Loading Interrupt Register
|
||||
64 0118 ED 47 LD I,A
|
||||
65 011A ED 5E IM 2 ; Interrupt Mode 2
|
||||
66 011C FB EI ; Enable Interrupt
|
||||
67
|
||||
68 ;--------------------- Main Program --------------------------
|
||||
69 011D C3 1D 01 AGAIN: JP AGAIN ; Endless
|
||||
70
|
||||
71
|
||||
72
|
||||
73 ;******************************************************************************
|
||||
74 ;* INTERRUPT SERVICE ROUTINE *
|
||||
75 ;* CTC Channel 0 *
|
||||
76 ;******************************************************************************
|
||||
77 01A8 ORG $01A8
|
||||
78 01A8 AA 01 DEFW _INT_CTC
|
||||
79 01AA F5 _INT_CTC: PUSH AF
|
||||
80 01AB E5 PUSH HL
|
||||
81 01AC 21 00 80 LD HL,COUNTER
|
||||
82 01AF 7E LD A,(HL) ; Read Counter
|
||||
83 01B0 3C INC A ; Increment Counter
|
||||
84 01B1 FE 07 CP $07 ; 252,21ms reached?
|
||||
85 01B3 C2 BD 01 JP NZ,_END_INT
|
||||
86 01B6 3E 00 LD A,$00 ; Reset Counter
|
||||
87 01B8 DB 81 IN A,(PIO_B) ; Toggle LED's with 2Hz
|
||||
88 01BA 2F CPL
|
||||
89 01BB D3 81 OUT (PIO_B),A ;
|
||||
90 01BD 77 _END_INT: LD (HL),A ; Store Counter
|
||||
91 01BE E1 POP HL
|
||||
92 01BF F1 POP AF
|
||||
93 01C0 FB EI ; Entry Point of Interrupt Service Routine
|
||||
94 01C1 ED 4D RETI
|
||||
95
|
||||
96
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
|
||||
Symbol table:
|
||||
|
||||
AGAIN 011D COUNTER 8000 CTC0 0000 CTC1 0001
|
||||
CTC2 0002 CTC3 0003 MAIN 0100 PIO_A 0080
|
||||
PIO_B 0081 PIO_C 0082 PIO_CON 0083 RAMTOP FFFF
|
||||
SIO_A_C 0042 SIO_A_D 0040 SIO_B_C 0043 SIO_B_D 0041
|
||||
_END_INT 01BD _INT_CTC 01AA
|
||||
18 symbols.
|
51
Reischl/lst/CTC_Counter.lst
Normal file
|
@ -0,0 +1,51 @@
|
|||
1 ;******************************************************************************
|
||||
2 ;* Z80 Assembler program *
|
||||
3 ;* Josef Reisinger *
|
||||
4 ;* josef.reisinger@htl-hl.ac.at *
|
||||
5 ;* 26/04/2015 *
|
||||
6 ;******************************************************************************
|
||||
7
|
||||
8 ; ---------------------------- PIO 82C55 I/O ---------------------------------
|
||||
9 0080 PIO_A: EQU $80 ; (INPUT)
|
||||
10 0081 PIO_B: EQU $81 ; (OUTPUT) OUT TO LEDS
|
||||
11 0082 PIO_C: EQU $82 ; (INPUT) IN from DIP SWITCHES
|
||||
12 0083 PIO_CON: EQU $83 ; CONTROL BYTE PIO 82C55
|
||||
13
|
||||
14 ; --------------------------- CTC Z80 Timer Counter --------------------------
|
||||
15 0000 CTC0 EQU $00 ; Channel 0
|
||||
16 0001 CTC1 EQU $01 ; Channel 1
|
||||
17 0002 CTC2 EQU $02 ; Channel 2
|
||||
18 0003 CTC3 EQU $03 ; Channel 3
|
||||
19
|
||||
20 ; -------------------------- SIO (USART) ----------------------------------------
|
||||
21 0040 SIO_A_D: EQU $40 ; Channel A Data Register
|
||||
22 0041 SIO_B_D: EQU $41 ; Channel B Data Register
|
||||
23 0042 SIO_A_C: EQU $42 ; Channel A Control Register
|
||||
24 0043 SIO_B_C: EQU $43 ; Channel B Control Register
|
||||
25
|
||||
26
|
||||
27 ;-------------------------- CONSTANTS ----------------------------------------
|
||||
28 FFFF RAMTOP: EQU $FFFF ; 32Kb RAM 8000H-FFFFH
|
||||
29
|
||||
30 ;******************************************************************************
|
||||
31 ;* START AFTER RESET, *
|
||||
32 ;* Function....: ready system and restart *
|
||||
33 ;******************************************************************************
|
||||
34 0000 ORG $0000
|
||||
35 0000 F3 DI ; Disable interrupt
|
||||
36 0001 31 FF FF LD SP,RAMTOP ; Set stack pointer to top off ram
|
||||
37 0004 3E 15 LD A,$15 ; Configure CTC Channel 0:No Interrupt, Timer Mode, No Prescaler,
|
||||
38 0006 D3 00 OUT (CTC0),A ; trigger on positive edge, next word = time constant, Channel continuous result operation
|
||||
39 0008 3E BA LD A,186 ; Write Time constant 186*560ns= 104µs
|
||||
40 000A D3 00 OUT (CTC0),A
|
||||
41 000C DB 00 AGAIN: IN A,(CTC0) ; Read actual status of CTC Channel 0
|
||||
42 000E C3 0C 00 JP AGAIN ; Endlos
|
||||
43
|
||||
|
||||
Symbol table:
|
||||
|
||||
AGAIN 000C CTC0 0000 CTC1 0001 CTC2 0002
|
||||
CTC3 0003 PIO_A 0080 PIO_B 0081 PIO_C 0082
|
||||
PIO_CON 0083 RAMTOP FFFF SIO_A_C 0042 SIO_A_D 0040
|
||||
SIO_B_C 0043 SIO_B_D 0041
|
||||
14 symbols.
|
42
Reischl/lst/CTC_Counter.s
Normal file
|
@ -0,0 +1,42 @@
|
|||
;******************************************************************************
|
||||
;* Z80 Assembler program *
|
||||
;* Josef Reisinger *
|
||||
;* josef.reisinger@htl-hl.ac.at *
|
||||
;* 26/04/2015 *
|
||||
;******************************************************************************
|
||||
|
||||
; ---------------------------- PIO 82C55 I/O ---------------------------------
|
||||
PIO_A: EQU $80 ; (INPUT)
|
||||
PIO_B: EQU $81 ; (OUTPUT) OUT TO LEDS
|
||||
PIO_C: EQU $82 ; (INPUT) IN from DIP SWITCHES
|
||||
PIO_CON: EQU $83 ; CONTROL BYTE PIO 82C55
|
||||
|
||||
; --------------------------- CTC Z80 Timer Counter --------------------------
|
||||
CTC0 EQU $00 ; Channel 0
|
||||
CTC1 EQU $01 ; Channel 1
|
||||
CTC2 EQU $02 ; Channel 2
|
||||
CTC3 EQU $03 ; Channel 3
|
||||
|
||||
; -------------------------- SIO (USART) ----------------------------------------
|
||||
SIO_A_D: EQU $40 ; Channel A Data Register
|
||||
SIO_B_D: EQU $41 ; Channel B Data Register
|
||||
SIO_A_C: EQU $42 ; Channel A Control Register
|
||||
SIO_B_C: EQU $43 ; Channel B Control Register
|
||||
|
||||
|
||||
;-------------------------- CONSTANTS ----------------------------------------
|
||||
RAMTOP: EQU $FFFF ; 32Kb RAM 8000H-FFFFH
|
||||
|
||||
;******************************************************************************
|
||||
;* START AFTER RESET, *
|
||||
;* Function....: ready system and restart *
|
||||
;******************************************************************************
|
||||
ORG $0000
|
||||
DI ; Disable interrupt
|
||||
LD SP,RAMTOP ; Set stack pointer to top off ram
|
||||
LD A,$15 ; Configure CTC Channel 0:No Interrupt, Timer Mode, No Prescaler,
|
||||
OUT (CTC0),A ; trigger on positive edge, next word = time constant, Channel continuous result operation
|
||||
LD A,186 ; Write Time constant 186*560ns= 104µs
|
||||
OUT (CTC0),A
|
||||
AGAIN: IN A,(CTC0) ; Read actual status of CTC Channel 0
|
||||
JP AGAIN ; Endlos
|
80
Reischl/lst/PIO_RAM_COUNTER.lst
Normal file
|
@ -0,0 +1,80 @@
|
|||
1 ;******************************************************************************
|
||||
2 ;* Z80 Assembler program *
|
||||
3 ;* Josef Reisinger *
|
||||
4 ;* josef.reisinger@htl-hl.ac.at *
|
||||
5 ;* 10/07/2017 *
|
||||
6 ;******************************************************************************
|
||||
7
|
||||
8 ; ---------------------------- PIO 82C55 I/O ---------------------------------
|
||||
9 0080 PIO_A: EQU $80 ; (INPUT)
|
||||
10 0081 PIO_B: EQU $81 ; (OUTPUT) OUT TO LEDS
|
||||
11 0082 PIO_C: EQU $82 ; (INPUT) IN from DIP SWITCHES
|
||||
12 0083 PIO_CON: EQU $83 ; CONTROL BYTE PIO 82C55
|
||||
13
|
||||
14 ; --------------------------- CTC Z80 Timer Counter --------------------------
|
||||
15 0000 CTC0 EQU $00 ; Channel 0
|
||||
16 0001 CTC1 EQU $01 ; Channel 1
|
||||
17 0002 CTC2 EQU $02 ; Channel 2
|
||||
18 0003 CTC3 EQU $03 ; Channel 3
|
||||
19
|
||||
20 ; -------------------------- SIO (USART) ----------------------------------------
|
||||
21 0040 SIO_A_D: EQU $40 ; Channel A Data Register
|
||||
22 0041 SIO_B_D: EQU $41 ; Channel B Data Register
|
||||
23 0042 SIO_A_C: EQU $42 ; Channel A Control Register
|
||||
24 0043 SIO_B_C: EQU $43 ; Channel B Control Register
|
||||
25
|
||||
26
|
||||
27 ;-------------------------- CONSTANTS ----------------------------------------
|
||||
28 FFFF RAMTOP: EQU $FFFF ; 32Kb RAM 8000H-FFFFH
|
||||
29 8000 COUNTER: EQU $8000 ; RAM Counter
|
||||
30
|
||||
31 ;******************************************************************************
|
||||
32 ;* RESET HANDLER *
|
||||
33 ;* Function: Initalize system and start Main Programm *
|
||||
34 ;******************************************************************************
|
||||
35 0000 ORG $0000
|
||||
36 0000 F3 DI ; Disable interrupt
|
||||
37 0001 31 FF FF LD SP,RAMTOP ; Set stack pointer
|
||||
38 0004 C3 00 01 JP MAIN ; jump to Main program
|
||||
39
|
||||
40
|
||||
41 ;*******************************************************************
|
||||
42 ;* MAIN PROGRAM *
|
||||
43 ;*******************************************************************
|
||||
44 0100 ORG $100
|
||||
45 0100 3E 99 MAIN: LD A,$99 ; Initialize 8255: PA0-PA7=IN (DIP SWITCHES), PB0-PB7=OUT (LEDS),
|
||||
46 0102 D3 83 OUT (PIO_CON),A ; PC0-PC7=IN, Mode 0 Selection
|
||||
47 0104 3E 01 LD A,$01 ; Initialize RAM Counter
|
||||
48 0106 21 00 80 LD HL,COUNTER ; Load RAM Counter Address
|
||||
49 0109 77 LD (HL),A ; Store Counter in RAM cell
|
||||
50 010A 7E AGAIN: LD A,(HL) ; Load RAM Counter
|
||||
51 010B D3 81 OUT (PIO_B),A ; Output RAM Counter to LEDs (PB0-PB7)
|
||||
52 010D 34 INC (HL) : Increment RAM Counter
|
||||
53 010E CD 14 01 CALL _WAIT
|
||||
54 0111 C3 0A 01 JP AGAIN ; Endless
|
||||
55
|
||||
56
|
||||
57
|
||||
58 ;*******************************************************************
|
||||
59 ;* Warteschleife 0,5s *
|
||||
60 ;*******************************************************************
|
||||
61 0114 16 FF _WAIT: LD D,$FF ;
|
||||
62 0116 1E FF _OUTER: LD E,$FF ;
|
||||
63 0118 1D _INNER: DEC E
|
||||
64 0119 C2 18 01 JP NZ,_INNER
|
||||
65 011C 15 DEC D
|
||||
66 011D C2 16 01 JP NZ,_OUTER
|
||||
67 0120 C9 RET
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
|
||||
Symbol table:
|
||||
AGAIN 010A COUNTER 8000 CTC0 0000 CTC1 0001
|
||||
CTC2 0002 CTC3 0003 MAIN 0100 PIO_A 0080
|
||||
PIO_B 0081 PIO_C 0082 PIO_CON 0083 RAMTOP FFFF
|
||||
SIO_A_C 0042 SIO_A_D 0040 SIO_B_C 0043 SIO_B_D 0041
|
||||
_INNER 0118 _OUTER 0116 _WAIT 0114
|
||||
19 symbols.
|
291
Reischl/lst/SIO_V24_Echo_Interrupt.lst
Normal file
|
@ -0,0 +1,291 @@
|
|||
1 ;******************************************************************************
|
||||
2 ;* Z80 Assembler program *
|
||||
3 ;* Josef Reisinger *
|
||||
4 ;* josef.reisinger@htl-hl.ac.at *
|
||||
5 ;* 10/07/2017 *
|
||||
6 ;******************************************************************************
|
||||
7
|
||||
8
|
||||
9 ; ---------------------------- PIO 82C55 I/O ---------------------------------
|
||||
10 0080 PIO_A: EQU $80 ; (INPUT)
|
||||
11 0081 PIO_B: EQU $81 ; (OUTPUT) OUT TO LEDS
|
||||
12 0082 PIO_C: EQU $82 ; (INPUT) IN from DIP SWITCHES
|
||||
13 0083 PIO_CON: EQU $83 ; CONTROL BYTE PIO 82C55
|
||||
14
|
||||
15
|
||||
16 ; --------------------------- CTC Z80 Timer Counter --------------------------
|
||||
17 0000 CTC0 EQU $00 ; Channel 0
|
||||
18 0001 CTC1 EQU $01 ; Channel 1
|
||||
19 0002 CTC2 EQU $02 ; Channel 2
|
||||
20 0003 CTC3 EQU $03 ; Channel 3
|
||||
21
|
||||
22 ; -------------------------- SIO (USART) ----------------------------------------
|
||||
23 0040 SIO_A_D: EQU $40 ; Channel A Data Register
|
||||
24 0041 SIO_B_D: EQU $41 ; Channel B Data Register
|
||||
25 0042 SIO_A_C: EQU $42 ; Channel A Control Register
|
||||
26 0043 SIO_B_C: EQU $43 ; Channel B Control Register
|
||||
27
|
||||
28
|
||||
29 ;-------------------------- CONSTANTS ----------------------------------------
|
||||
30 FFFF RAMTOP: EQU $FFFF ; 32Kb RAM 8000H-FFFFH
|
||||
31 000D CR: EQU $0D
|
||||
32 000A LF: EQU $0A
|
||||
33 0020 SPACE: EQU $20
|
||||
34
|
||||
35 ;******************************************************************************
|
||||
36 ;* RESET HANDLER *
|
||||
37 ;* Function: Start Main Program *
|
||||
38 ;******************************************************************************
|
||||
39 0000 ORG $0000
|
||||
40 0000 C3 00 01 JP MAIN ; jump to Main program
|
||||
41
|
||||
42
|
||||
43 ;******************************************************************************
|
||||
44 ;* SIO INTERRUPT HANDLER *
|
||||
45 ;* Function: Start Main Program *
|
||||
46 ;******************************************************************************
|
||||
47 000C ORG $000C
|
||||
48 000C A5 01 DEFW RX_CHA_AVAILABLE
|
||||
49
|
||||
50 000E ORG $000E
|
||||
51 000E D5 01 DEFW SPEC_RX_CONDITION
|
||||
52
|
||||
53
|
||||
54 ;******************************************************************************
|
||||
55 ;* NMI HANDLER *
|
||||
56 ;* Handles NMI Interrupt Request *
|
||||
57 ;******************************************************************************
|
||||
58 0066 ORG $0066
|
||||
59 0066 21 F5 01 LD HL,NMI_TEXT ; Send NMI to V24
|
||||
60 0069 CD 94 01 CALL SIO_PUT_STRING
|
||||
61 006C ED 45 RETN
|
||||
62
|
||||
63 ;******************************************************************************
|
||||
64 ;* MAIN PROGRAM *
|
||||
65 ;******************************************************************************
|
||||
66 0100 ORG $100
|
||||
67 0100 F3 MAIN: DI ; Disable interrupt
|
||||
68 0101 31 FF FF LD SP,RAMTOP ; Set stack pointer
|
||||
69 0104 CD 26 01 CALL PIO_INIT ; Init PIO (8255)
|
||||
70 0107 CD 2B 01 CALL CTC_INIT ; Initialize CTC Channel 1 for 9600 Baud (SIO Channel A)
|
||||
71 010A CD 34 01 CALL SIO_INIT ; Initialize SIO for character based transfer (9600,n,8,1)
|
||||
72
|
||||
73 010D 21 E5 01 LD HL,START_TEXT ; Send Welcome Text to V24
|
||||
74 0110 CD 94 01 CALL SIO_PUT_STRING
|
||||
75
|
||||
76 0113 3E 00 LD A,0
|
||||
77 0115 ED 47 LD I,A ; Load I Register with zero
|
||||
78 0117 ED 5E IM 2 ; Set Interrupt 2
|
||||
79 0119 FB EI ; Enable Interrupt
|
||||
80
|
||||
81 011A 3E 01 LD A,$01 ; Initialize moving light
|
||||
82 011C D3 81 _AGAIN: OUT (PIO_B),A ; output Moving light to LED
|
||||
83 011E CB 17 RL A ; next bit
|
||||
84 0120 CD D8 01 CALL _WAIT ; wait 0,5 s
|
||||
85 0123 C3 1C 01 JP _AGAIN ; endless
|
||||
86
|
||||
87
|
||||
88 ;******************************************************************************
|
||||
89 ;* Initialize PIO (8255) *
|
||||
90 ;******************************************************************************
|
||||
91 0126 3E 99 PIO_INIT: LD A,$99 ; Init PIO 8255 Control Word:
|
||||
92 0128 ; PA0-PA7=IN (DIP SWITCHES)
|
||||
93 0128 ; PB0-PB7=OUT (LEDS),
|
||||
94 0128 D3 83 OUT (PIO_CON),A ; PC0-PC7=IN, Mode 0 Selection
|
||||
95 012A C9 RET
|
||||
96
|
||||
97 ;******************************************************************************
|
||||
98 ;* Initialize CTC Channel 1 (SIO Channel A Clock) *
|
||||
99 ;******************************************************************************
|
||||
100 012B 3E 05 CTC_INIT: LD A,$05 ; Init Timer Counter - Channel 1
|
||||
101 012D D3 01 OUT (CTC1),A ; for Baudrate 9600 (No Interrupt, Timer Mode, PSC=16,
|
||||
102 012F ; trigger on positive edge
|
||||
103 012F 3E 0C LD A,$0C ; Write Time constant 12*16*552ns= 105,98s
|
||||
104 0131 D3 01 OUT (CTC1),A
|
||||
105 0133 C9 RET
|
||||
106
|
||||
107
|
||||
108 ;******************************************************************************
|
||||
109 ;* Initialize SIO Channel A for character based transfer *
|
||||
110 ;* Interrupt on Received characters on Channel A */
|
||||
111 ;******************************************************************************
|
||||
112 0134 3E 30 SIO_INIT: LD A,$30 ; Write to WR0 Register --> Error Reset
|
||||
113 0136 D3 42 OUT (SIO_A_C),A
|
||||
114 0138 3E 18 LD A,$18 ; Write to WR0 Register --> Channel Reset
|
||||
115 013A D3 42 OUT (SIO_A_C),A
|
||||
116 013C 3E 04 LD A,$04 ; Select WR4 Register
|
||||
117 013E D3 42 OUT (SIO_A_C),A
|
||||
118 0140 3E 04 LD A,$04 ; CLK*1, 1STOP Bit, No Parity
|
||||
119 0142 D3 42 OUT (SIO_A_C),A
|
||||
120
|
||||
121 0144 CD 7E 01 CALL A_RTS_ON ; TX on, TX 8Bit, DTR inactive, RTS active; Break off
|
||||
122
|
||||
123 0147 3E 01 LD A,$1 ; Select WR1 Register Channel B
|
||||
124 0149 D3 43 OUT (SIO_B_C),A
|
||||
125 014B 3E 04 LD A,$04 ; no Interrupt on Channel B, status affects Vector
|
||||
126 014D D3 43 OUT (SIO_B_C),A ;
|
||||
127 014F 3E 02 LD A,$2 ; Select WR2 Register Channel B
|
||||
128 0151 D3 43 OUT (SIO_B_C),A
|
||||
129 0153 3E 00 LD A,$00 ; Definition Interrupt vector. Bits D3,D2,D1 are changed according to
|
||||
130 0155 D3 43 OUT (SIO_B_C),A ; RX condition (see interrupt vector table)
|
||||
131
|
||||
132 0157 3E 01 LD A,$1 ; Select WR1 Register
|
||||
133 0159 D3 42 OUT (SIO_A_C),A
|
||||
134 015B 3E 18 LD A,$18 ; Interrupts on all RX Characters, Parity is not a spec RX Condition
|
||||
135 015D D3 42 OUT (SIO_A_C),A ; Buffer overrun is a special condition, TX no Interrupt
|
||||
136
|
||||
137 015F CD 63 01 CALL SIO_A_EN ; Enable RX Channel A
|
||||
138 0162 C9 RET
|
||||
139
|
||||
140
|
||||
141 ;******************************************************************************
|
||||
142 ;* Enable RX Channel A *
|
||||
143 ;******************************************************************************
|
||||
144 0163 3E 03 SIO_A_EN: LD A,$03 ; Select WR3 Register
|
||||
145 0165 D3 42 OUT (SIO_A_C),A
|
||||
146 0167 3E C1 LD A,$C1 ; RX enable,8 Data Bits
|
||||
147 0169 D3 42 OUT (SIO_A_C),A
|
||||
148 016B C9 RET
|
||||
149
|
||||
150 ;******************************************************************************
|
||||
151 ;* Disable RX Channel A *
|
||||
152 ;******************************************************************************
|
||||
153 016C 3E 03 SIO_A_DI: LD A,$03 ; Select WR3 Register
|
||||
154 016E D3 42 OUT (SIO_A_C),A
|
||||
155 0170 3E C0 LD A,$C0 ; RX diable,8 Data Bits
|
||||
156 0172 D3 42 OUT (SIO_A_C),A
|
||||
157 0174 C9 RET
|
||||
158
|
||||
159 ;******************************************************************************
|
||||
160 ;* Channel A RTS inactive (RTS = 1) *
|
||||
161 ;******************************************************************************
|
||||
162 0175 3E 05 A_RTS_OFF: LD A,$05 ; Select WR5 Register
|
||||
163 0177 D3 42 OUT (SIO_A_C),A
|
||||
164 0179 3E 68 LD A,$68 ; TX on,TX 8 Bit, DTR inactive,RTS inactive; Break off,
|
||||
165 017B D3 42 OUT (SIO_A_C),A
|
||||
166 017D C9 RET
|
||||
167
|
||||
168 ;******************************************************************************
|
||||
169 ;* Channel A RTS inactive (RTS=0) *
|
||||
170 ;******************************************************************************
|
||||
171 017E 3E 05 A_RTS_ON: LD A,$05 ; Select WR5 Register
|
||||
172 0180 D3 42 OUT (SIO_A_C),A
|
||||
173 0182 3E 6A LD A,$6A ; TX on,TX 8 Bit,DTR inactive, RTS active; Break off
|
||||
174 0184 D3 42 OUT (SIO_A_C),A
|
||||
175 0186 C9 RET
|
||||
176
|
||||
177 ;******************************************************************************
|
||||
178 ;* Send one Character Via SIO Channel A(Polling Mode) *
|
||||
179 ;* D- Register: Character to send (ASCII Code) *
|
||||
180 ;******************************************************************************
|
||||
181 0187 F5 SIO_PUT_CHAR: PUSH AF
|
||||
182 0188 DB 42 _TX_READY: IN A,(SIO_A_C) ; Read RRO Register
|
||||
183 018A CB 57 BIT 2,A ; TX Buffer empty ?
|
||||
184 018C CA 88 01 JP Z,_TX_READY ; No --> Wait
|
||||
185 018F 7A LD A,D ; load character in A
|
||||
186 0190 D3 40 OUT (SIO_A_D),A ; Send character (Transfer Buffer)
|
||||
187 0192 F1 POP AF
|
||||
188 0193 C9 RET
|
||||
189
|
||||
190
|
||||
191 ;******************************************************************************
|
||||
192 ;* SEND STRING to V24 via SIO *
|
||||
193 ;* HL: contains start address of string *
|
||||
194 ;******************************************************************************
|
||||
195 0194 F5 SIO_PUT_STRING: PUSH AF
|
||||
196 0195 7E _NEXT_CHAR: LD A,(HL) ; get character
|
||||
197 0196 FE 00 CP $00 ; END of String ?
|
||||
198 0198 CA A3 01 JP Z,_TEXT_END
|
||||
199 019B 57 LD D,A
|
||||
200 019C CD 87 01 CALL SIO_PUT_CHAR ; send character
|
||||
201 019F 23 INC HL ; next character
|
||||
202 01A0 C3 95 01 JP _NEXT_CHAR
|
||||
203 01A3 F1 _TEXT_END: POP AF
|
||||
204 01A4 C9 RET
|
||||
205
|
||||
206
|
||||
207 ;******************************************************************************
|
||||
208 ;* INTERUTPT HANDLE SIO CHANNEL A CHARACTER RECEIVE *
|
||||
209 ;******************************************************************************
|
||||
210 01A5 F5 RX_CHA_AVAILABLE: PUSH AF
|
||||
211 01A6 CD 75 01 CALL A_RTS_OFF
|
||||
212 01A9 DB 40 IN A,(SIO_A_D) ; Read RX Character
|
||||
213 01AB 57 LD D,A ; load Character in D
|
||||
214 01AC CD 87 01 CALL SIO_PUT_CHAR ; Echo Char back to Host
|
||||
215
|
||||
216 01AF 3E 00 _NEXT_RX_CHAR: LD A,$0 ;Select RR0 Register
|
||||
217 01B1 D3 42 OUT (SIO_A_C),A
|
||||
218 01B3 DB 42 IN A,(SIO_A_C) ; Read RRO Register
|
||||
219 01B5 CB 47 BIT 0,A ; RX Character Available ?
|
||||
220 01B7 CA C3 01 JP Z,_NEXT_TX_CHAR ; No --> OK
|
||||
221 01BA DB 40 IN A,(SIO_A_D) ; Read that character
|
||||
222 01BC 57 LD D,A ; load Character in D
|
||||
223 01BD CD 87 01 CALL SIO_PUT_CHAR ; Echo Char back to Host
|
||||
224 01C0 C3 AF 01 JP _NEXT_RX_CHAR
|
||||
225
|
||||
226 01C3 3E 01 _NEXT_TX_CHAR: LD A,$1 ; Select RR1 Register
|
||||
227 01C5 D3 42 OUT (SIO_A_C),A
|
||||
228 01C7 DB 42 IN A,(SIO_A_C) ; Read RR1 Register
|
||||
229 01C9 CB 47 BIT 0,A ; ALL Characters sent ?
|
||||
230 01CB CA C3 01 JP Z,_NEXT_TX_CHAR
|
||||
231
|
||||
232 01CE FB _EO_CH_AV: EI
|
||||
233 01CF CD 7E 01 CALL A_RTS_ON
|
||||
234 01D2 F1 POP AF
|
||||
235 01D3 ED 4D RETI
|
||||
236
|
||||
237 ;******************************************************************************
|
||||
238 ;* INTERUTPT HANDLE SIO CHANNEL A ERROR *
|
||||
239 ;******************************************************************************
|
||||
240 01D5 SPEC_RX_CONDITION
|
||||
241 01D5 C3 00 01 JP MAIN ; Restart -> jump to Main program (RESTART)
|
||||
242
|
||||
243
|
||||
244
|
||||
245 ;*******************************************************************
|
||||
246 ;* Warteschleife 0,5s *
|
||||
247 ;*******************************************************************
|
||||
248 01D8 06 FF _WAIT: LD B,$FF ;
|
||||
249 01DA 0E FF _OUTER: LD C,$FF ;
|
||||
250 01DC 0D _INNER: DEC C
|
||||
251 01DD C2 DC 01 JP NZ,_INNER
|
||||
252 01E0 05 DEC B
|
||||
253 01E1 C2 DA 01 JP NZ,_OUTER
|
||||
254 01E4 C9 RET
|
||||
255
|
||||
256 ;******************************************************************************
|
||||
257 ;* TEXT DEFINITIONS *
|
||||
258 ;******************************************************************************
|
||||
259 01E5 0D 0A 5A 38 START_TEXT: DEFB CR,LF,'Z','8','0',SPACE,'D','E','M','O',SPACE,'V','1','.','0',$00
|
||||
01E9 30 20 44 45
|
||||
01ED 4D 4F 20 56
|
||||
01F1 31 2E 30 00
|
||||
260 01F5 0D 0A 4E 4D NMI_TEXT: DEFB CR,LF,'N','M','I',$00
|
||||
01F9 49 00
|
||||
261
|
||||
262
|
||||
263
|
||||
264
|
||||
265
|
||||
266
|
||||
267
|
||||
268
|
||||
269
|
||||
|
||||
Symbol table:
|
||||
|
||||
A_RTS_OFF 0175 A_RTS_ON 017E CR 000D
|
||||
CTC0 0000 CTC1 0001 CTC2 0002
|
||||
CTC3 0003 CTC_INIT 012B LF 000A
|
||||
MAIN 0100 NMI_TEXT 01F5 PIO_A 0080
|
||||
PIO_B 0081 PIO_C 0082 PIO_CON 0083
|
||||
PIO_INIT 0126 RAMTOP FFFF RX_CHA_AVAILABLE 01A5
|
||||
SIO_A_C 0042 SIO_A_D 0040 SIO_A_DI 016C
|
||||
SIO_A_EN 0163 SIO_B_C 0043 SIO_B_D 0041
|
||||
SIO_INIT 0134 SIO_PUT_CHAR 0187 SIO_PUT_STRING 0194
|
||||
SPACE 0020 SPEC_RX_CONDITION 01D5 START_TEXT 01E5
|
||||
_AGAIN 011C _EO_CH_AV 01CE _INNER 01DC
|
||||
_NEXT_CHAR 0195 _NEXT_RX_CHAR 01AF _NEXT_TX_CHAR 01C3
|
||||
_OUTER 01DA _TEXT_END 01A3 _TX_READY 0188
|
||||
_WAIT 01D8
|
||||
40 symbols.
|
202
Reischl/lst/SIO_V24_Echo_Poll.lst
Normal file
|
@ -0,0 +1,202 @@
|
|||
1 ;******************************************************************************
|
||||
2 ;* Z80 Assembler program *
|
||||
3 ;* Josef Reisinger *
|
||||
4 ;* josef.reisinger@htl-hl.ac.at *
|
||||
5 ;* 10/07/2017 *
|
||||
6 ;******************************************************************************
|
||||
7
|
||||
8
|
||||
9 ; ---------------------------- PIO 82C55 I/O ---------------------------------
|
||||
10 0080 PIO_A: EQU $80 ; (INPUT)
|
||||
11 0081 PIO_B: EQU $81 ; (OUTPUT) OUT TO LEDS
|
||||
12 0082 PIO_C: EQU $82 ; (INPUT) IN from DIP SWITCHES
|
||||
13 0083 PIO_CON: EQU $83 ; CONTROL BYTE PIO 82C55
|
||||
14
|
||||
15
|
||||
16 ; --------------------------- CTC Z80 Timer Counter --------------------------
|
||||
17 0000 CTC0 EQU $00 ; Channel 0
|
||||
18 0001 CTC1 EQU $01 ; Channel 1
|
||||
19 0002 CTC2 EQU $02 ; Channel 2
|
||||
20 0003 CTC3 EQU $03 ; Channel 3
|
||||
21
|
||||
22 ; -------------------------- SIO (USART) ----------------------------------------
|
||||
23 0040 SIO_A_D: EQU $40 ; Channel A Data Register
|
||||
24 0041 SIO_B_D: EQU $41 ; Channel B Data Register
|
||||
25 0042 SIO_A_C: EQU $42 ; Channel A Control Register
|
||||
26 0043 SIO_B_C: EQU $43 ; Channel B Control Register
|
||||
27
|
||||
28
|
||||
29 ;-------------------------- CONSTANTS ----------------------------------------
|
||||
30 FFFF RAMTOP: EQU $FFFF ; 32Kb RAM 8000H-FFFFH
|
||||
31 000D CR: EQU $0D
|
||||
32 000A LF: EQU $0A
|
||||
33 0020 SPACE: EQU $20
|
||||
34
|
||||
35 ;******************************************************************************
|
||||
36 ;* RESET HANDLER *
|
||||
37 ;* Function: Start Main Program *
|
||||
38 ;******************************************************************************
|
||||
39 0000 ORG $0000
|
||||
40 0000 C3 00 01 JP MAIN ; jump to Main program
|
||||
41
|
||||
42
|
||||
43 ;******************************************************************************
|
||||
44 ;* NMI HANDLER *
|
||||
45 ;* Handles NMI Interrupt Request *
|
||||
46 ;******************************************************************************
|
||||
47 0066 ORG $0066
|
||||
48 0066 21 A1 01 LD HL,NMI_TEXT ; Send NMI to V24
|
||||
49 0069 CD 80 01 CALL SIO_PUT_STRING
|
||||
50 006C ED 45 RETN
|
||||
51
|
||||
52 ;******************************************************************************
|
||||
53 ;* MAIN PROGRAM *
|
||||
54 ;******************************************************************************
|
||||
55 0100 ORG $100
|
||||
56 0100 F3 MAIN: DI ; Disable interrupt
|
||||
57 0101 31 FF FF LD SP,RAMTOP ; Set stack pointer
|
||||
58 0104 CD 1F 01 CALL PIO_INIT ; Init PIO (8255)
|
||||
59 0107 CD 24 01 CALL CTC_INIT ; Initialize CTC Channl1 for 9600 Baud (SIO Channel A)
|
||||
60 010A CD 2D 01 CALL SIO_INIT ; Animalize SIO for character based transfer (9600,n,8,1)
|
||||
61 010D 21 91 01 LD HL,START_TEXT ; Send Welcome Text to V24
|
||||
62 0110 CD 80 01 CALL SIO_PUT_STRING
|
||||
63 0113 CD 63 01 _AGAIN: CALL SIO_GET_CHAR ; Wait for Character on V24
|
||||
64 0116 7B LD A,E ; Output Error to LED's
|
||||
65 0117 D3 81 OUT (PIO_B),A
|
||||
66 0119 CD 56 01 CALL SIO_PUT_CHAR ; Echo Character to V24
|
||||
67 011C C3 13 01 JP _AGAIN
|
||||
68 011F ;
|
||||
69
|
||||
70 ;******************************************************************************
|
||||
71 ;* Initialize PIO (8255) *
|
||||
72 ;******************************************************************************
|
||||
73 011F 3E 99 PIO_INIT: LD A,$99 ; Init PIO 8255 Control Word:
|
||||
74 0121 ; PA0-PA7=IN (DIP SWITCHES)
|
||||
75 0121 ; PB0-PB7=OUT (LEDS),
|
||||
76 0121 D3 83 OUT (PIO_CON),A ; PC0-PC7=IN, Mode 0 Selection
|
||||
77 0123 C9 RET
|
||||
78
|
||||
79 ;******************************************************************************
|
||||
80 ;* Initialize CTC Channel 1 (SIO Channel A Clock) *
|
||||
81 ;******************************************************************************
|
||||
82 0124 3E 05 CTC_INIT: LD A,$05 ; Init Timer Counter - Channel 1
|
||||
83 0126 D3 01 OUT (CTC1),A ; for Baudrate 9600 (No Interrupt, Timer Mode, PSC=16,
|
||||
84 0128 ; trigger on positive edge
|
||||
85 0128 3E 0C LD A,$0C ; Write Time constant 12*16*552ns= 105,98s
|
||||
86 012A D3 01 OUT (CTC1),A
|
||||
87 012C C9 RET
|
||||
88
|
||||
89
|
||||
90 ;******************************************************************************
|
||||
91 ;* Initialize SIO Channel A for character based transfer *
|
||||
92 ;******************************************************************************
|
||||
93 012D 3E 30 SIO_INIT: LD A,$30 ; Write to WR0 Register --> Error Reset
|
||||
94 012F D3 42 OUT (SIO_A_C),A
|
||||
95 0131 3E 18 LD A,$18 ; Write to WR0 Register --> Channel Reset
|
||||
96 0133 D3 42 OUT (SIO_A_C),A
|
||||
97 0135 3E 04 LD A,$04 ; Select WR4 Register
|
||||
98 0137 D3 42 OUT (SIO_A_C),A
|
||||
99 0139 3E 04 LD A,$04 ; CLK*1, 1STOP Bit, No Parity
|
||||
100 013B D3 42 OUT (SIO_A_C),A
|
||||
101 013D 3E 03 LD A,$03 ; Select WR3 Register
|
||||
102 013F D3 42 OUT (SIO_A_C),A
|
||||
103 0141 3E C1 LD A,$C1 ; RX enable,8 Data Bits
|
||||
104 0143 D3 42 OUT (SIO_A_C),A
|
||||
105 0145 3E 05 LD A,$05 ; Select WR5 Register
|
||||
106 0147 D3 42 OUT (SIO_A_C),A
|
||||
107 0149 3E 68 LD A,$68 ; TX enable,8 Data Bits, DTR inactive, RTS inactive,Break off
|
||||
108 014B D3 42 OUT (SIO_A_C),A
|
||||
109 014D 3E 01 LD A,$1 ; Select WR1 Register
|
||||
110 014F D3 42 OUT (SIO_A_C),A
|
||||
111 0151 3E 00 LD A,$0 ; No Interrupts for Rx and Tx Characters
|
||||
112 0153 D3 42 OUT (SIO_A_C),A
|
||||
113 0155 C9 RET
|
||||
114
|
||||
115
|
||||
116
|
||||
117 ;******************************************************************************
|
||||
118 ;* Send one Character Via SIO Channel A(Polling Mode) *
|
||||
119 ;* D- Register: Character to send (ASCII Code) *
|
||||
120 ;******************************************************************************
|
||||
121 0156 F5 SIO_PUT_CHAR: PUSH AF
|
||||
122 0157 DB 42 _TX_READY: IN A,(SIO_A_C) ; Read RRO Register
|
||||
123 0159 CB 57 BIT 2,A ; TX Buffer empty ?
|
||||
124 015B CA 57 01 JP Z,_TX_READY ; No --> Wait
|
||||
125 015E 7A LD A,D ; load character in A
|
||||
126 015F D3 40 OUT (SIO_A_D),A ; Send character (Transfer Buffer)
|
||||
127 0161 F1 POP AF
|
||||
128 0162 C9 RET
|
||||
129
|
||||
130
|
||||
131 ;******************************************************************************
|
||||
132 ;* Receive one Character Via SIO Channel A(Polling Mode) *
|
||||
133 ;* D- Register: Character received (ASCII Code) *
|
||||
134 ;* E-Register: Error Code *
|
||||
135 ;******************************************************************************
|
||||
136 0163 F5 SIO_GET_CHAR: PUSH AF
|
||||
137 0164 DB 42 _RX_READY: IN A,(SIO_A_C) ; Read RRO Register
|
||||
138 0166 CB 47 BIT 0,A ; RX Character Available ?
|
||||
139 0168 CA 64 01 JP Z,_RX_READY ; No --> Wait
|
||||
140 016B DB 40 IN A,(SIO_A_D) ; Store character
|
||||
141 016D 57 LD D,A
|
||||
142 016E 3E 01 LD A,$01 ; Select WR1 Register
|
||||
143 0170 D3 42 OUT (SIO_A_C),A
|
||||
144 0172 DB 42 IN A,(SIO_A_C) ; Read Error Register
|
||||
145 0174 5F LD E,A ; store Error Status
|
||||
146 0175 E6 70 AND $70 ; only D6(CRC Framing Error),D5(Rx Overrun Error) und D4 (Parity Error)
|
||||
147 0177 CA 7E 01 JP Z,_RX_EXIT ; return if no error
|
||||
148 017A 3E 30 LD A,$30 ; reset Error
|
||||
149 017C D3 42 OUT (SIO_A_C),A
|
||||
150 017E F1 _RX_EXIT: POP AF
|
||||
151 017F C9 RET
|
||||
152
|
||||
153
|
||||
154 ;******************************************************************************
|
||||
155 ;* SEND STRING to V24 via SIO *
|
||||
156 ;* HL: contains start address of string *
|
||||
157 ;******************************************************************************
|
||||
158 0180 F5 SIO_PUT_STRING: PUSH AF
|
||||
159 0181 7E _NEXT_CHAR: LD A,(HL) ; get character
|
||||
160 0182 FE 00 CP $00 ; END of String ?
|
||||
161 0184 CA 8F 01 JP Z,_TEXT_END
|
||||
162 0187 57 LD D,A
|
||||
163 0188 CD 56 01 CALL SIO_PUT_CHAR ; send character
|
||||
164 018B 23 INC HL ; next character
|
||||
165 018C C3 81 01 JP _NEXT_CHAR
|
||||
166 018F F1 _TEXT_END: POP AF
|
||||
167 0190 C9 RET
|
||||
168
|
||||
169
|
||||
170 ;******************************************************************************
|
||||
171 ;* TEXT DEFINITIONS *
|
||||
172 ;******************************************************************************
|
||||
173 0191 0D 0A 5A 38 START_TEXT: DEFB CR,LF,'Z','8','0',SPACE,'D','E','M','O',SPACE,'V','1','.','0',$00
|
||||
0195 30 20 44 45
|
||||
0199 4D 4F 20 56
|
||||
019D 31 2E 30 00
|
||||
174 01A1 0D 0A 4E 4D NMI_TEXT: DEFB CR,LF,'N','M','I',$00
|
||||
01A5 49 00
|
||||
175
|
||||
176
|
||||
177
|
||||
178
|
||||
179
|
||||
180
|
||||
181
|
||||
182
|
||||
183
|
||||
|
||||
Symbol table:
|
||||
|
||||
CR 000D CTC0 0000 CTC1 0001
|
||||
CTC2 0002 CTC3 0003 CTC_INIT 0124
|
||||
LF 000A MAIN 0100 NMI_TEXT 01A1
|
||||
PIO_A 0080 PIO_B 0081 PIO_C 0082
|
||||
PIO_CON 0083 PIO_INIT 011F RAMTOP FFFF
|
||||
SIO_A_C 0042 SIO_A_D 0040 SIO_B_C 0043
|
||||
SIO_B_D 0041 SIO_GET_CHAR 0163 SIO_INIT 012D
|
||||
SIO_PUT_CHAR 0156 SIO_PUT_STRING 0180 SPACE 0020
|
||||
START_TEXT 0191 _AGAIN 0113 _NEXT_CHAR 0181
|
||||
_RX_EXIT 017E _RX_READY 0164 _TEXT_END 018F
|
||||
_TX_READY 0157
|
||||
31 symbols.
|
55
Reischl/lst/pio.lst
Normal file
|
@ -0,0 +1,55 @@
|
|||
1 ;******************************************************************************
|
||||
2 ;* Z80 Assemblerprogramm *
|
||||
3 ;* Josef Reisinger *
|
||||
4 ;* josef.reisinger@htl-hl.ac.at *
|
||||
5 ;* 26/04/2015 *
|
||||
6 ;******************************************************************************
|
||||
7
|
||||
8
|
||||
9 ; ---------------------------- PIO 82C55 I/O ---------------------------------
|
||||
10 0080 PIO_A: EQU $80 ; (INPUT)
|
||||
11 0081 PIO_B: EQU $81 ; (OUTPUT) OUT TO LEDS
|
||||
12 0082 PIO_C: EQU $82 ; (INPUT) IN from DIP SWITCHES
|
||||
13 0083 PIO_CON: EQU $83 ; CONTROL BYTE PIO 82C55
|
||||
14
|
||||
15 ; --------------------------- CTC Z80 Timer Counter --------------------------
|
||||
16 0000 CTC0 EQU $00 ; Channel 0
|
||||
17 0001 CTC1 EQU $01 ; Channel 1
|
||||
18 0002 CTC2 EQU $02 ; Channel 2
|
||||
19 0003 CTC3 EQU $03 ; Channel 3
|
||||
20
|
||||
21 ; -------------------------- SIO (USART) ----------------------------------------
|
||||
22 0040 SIO_A_D: EQU $40 ; Channel A Data Register
|
||||
23 0041 SIO_B_D: EQU $41 ; Channel B Data Register
|
||||
24 0042 SIO_A_C: EQU $42 ; Channel A Control Register
|
||||
25 0043 SIO_B_C: EQU $43 ; Channel B Control Register
|
||||
26
|
||||
27
|
||||
28 ;-------------------------- CONSTANTS ----------------------------------------
|
||||
29 FFFF RAMTOP: EQU $FFFF ; 32Kb RAM 8000H-FFFFH
|
||||
30
|
||||
31
|
||||
32 ;******************************************************************************
|
||||
33 ;* START AFTER RESET, *
|
||||
34 ;* Function....: ready system and restart *
|
||||
35 ;******************************************************************************
|
||||
36 0000 ORG $0000
|
||||
37 0000 F3 DI ; Disable interrupt
|
||||
38 0001 31 FF FF LD SP,RAMTOP ; Set stack pointer to top off ram
|
||||
39 0004 3E 99 LD A,$99 ; PA0-PA7=IN (DIP SWITCHES), PB0-PB7=OUT (LEDS), PC0-PC7=IN, Mode 0 Selektion
|
||||
40 0006 D3 83 OUT (PIO_CON),A
|
||||
41 0008 DB 83 IN A,(PIO_CON)
|
||||
42 000A DB 80 AGAIN: IN A,(PIO_A) ; Read actual status of Switches (PA0-PA7)
|
||||
43 000C D3 81 OUT (PIO_B),A ; Output Status to LEDs (PB0-PB7)
|
||||
44 000E C3 0A 00 JP AGAIN ; Endless
|
||||
45
|
||||
46
|
||||
47
|
||||
|
||||
Symbol table:
|
||||
|
||||
AGAIN 000A CTC0 0000 CTC1 0001 CTC2 0002
|
||||
CTC3 0003 PIO_A 0080 PIO_B 0081 PIO_C 0082
|
||||
PIO_CON 0083 RAMTOP FFFF SIO_A_C 0042 SIO_A_D 0040
|
||||
SIO_B_C 0043 SIO_B_D 0041
|
||||
14 symbols
|