1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
;
;****************************************************************
;
; EUMEL Initialisierung fuer 6502 Teil
;
; Version 0.4 vom 25. 11. 1985
; Version 0.5 vom 24.12.86
; Version 0.6 vom 14.01.87
;
;****************************************************************
;
.6502
.radix 16
main_ROM equ 0C082
lc_RAM equ 0C083
lc_lock equ 0C00F
RESET EQU $FA62
BREAK EQU $FA4C
VECTBL EQU $FFFA
;................................................................
;
init65:
sei
lda lc_RAM
lda lc_RAM ; LC-RAM write enable
lda lc_lock ; verriegeln
;
ldx #0 ; pointer initialisieren
stx task
stx INTPAR1
stx IFLG ; "Weiter" Kanal 5 Receiveinterrupt
stx E_FLG ; Keine Eingabeflusskontrolle
stx A_FLG ; Keine Ausgabeflusskontrolle
stx SerFlg ; Kein Ausgabestop
stx Wait_flg ; 64180 darf auf Pufferdescriptor zugreifen
stx bus_locked ; Inteerupt an 64180 erlaubt, da kein Bus-Lock
stx err1_bits
stx err5_bits ; Keine Uebertragungs-Fehler aufgetreten
stx KeyIn ; Tastaturpuffer leer
stx KeyOut
stx param1+1
dex ; X := FF
stx param2
stx param2+1
stx last_track
lda #0 ; Physische Addresse der Sektoren
tax ; bestimmen (ueber Interleave)
interlv_1:
sta ilv_tble,x
inx
clc
adc #3 ; interleave
and #0F ; MOD 16
cpx #10
bne interlv_1
ldx #80
stx param1
jsr GCTRL ; Grafik initialisieren
jsr init_pbuf
ldx #initab_len
rloop: lda rbuf_ini,x
sta rbuf,x
dex
bpl rloop
ldx #initab_len
tloop: lda tbuf_ini,x
sta tbuf,x
dex
bpl tloop
ldx #6
vecloop:
lda vector,x
sta vectbl,x ; Vektoren ins RAM kopieren
dex
bne vecloop
sta KeyStr ; Tastatur ruecksetzen
sta 0C009 ; auf Interrupt schalten
; serielle Schnittstelle initialisieren
;
lda #1E ; 9600 Bd, 8 Bits/Char., 1 Stopbit
sta SER_CTR
lda #09 ; no parity, rx/tx irq's enabled
sta SER_COM
ldx SLT180
stx SLOT180
cli ; Interrupt enable
jmp task_loop ; Jump in die Task_Loop_Routine
vector:
dw resvec ; NMI
dw resvec ; RESET
dw irqvec ; IRQ & BRK
tbuf_ini:
DW (SBUFEND - SBUFBEG) * 100H, 0
DW SBUFBEG * 100H, SBUFBEG * 100H
DB SBUFBEG, SBUFEND
rbuf_ini:
DW (RBUFEND - RBUFBEG) * 100H, 0
DW RBUFBEG * 100H, RBUFBEG * 100H
DB RBUFBEG, RBUFEND
ds $100-(*-start)
|