OpenCores
URL https://opencores.org/ocsvn/rf6809/rf6809/trunk

Subversion Repositories rf6809

[/] [rf6809/] [trunk/] [software/] [boot/] [boot_rom.lst] - Blame information for rev 14

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 robfinch
 
2 4 robfinch
                              ; ============================================================================
3
                              ;        __
4 13 robfinch
                              ;   \\__/ o\    (C) 2013-2022  Robert Finch, Waterloo
5 4 robfinch
                              ;    \  __ /    All rights reserved.
6
                              ;     \/_//     robfinch@opencores.org
7
                              ;       ||
8
                              ;
9
                              ;
10 13 robfinch
                              ; BSD 3-Clause License
11
                              ; Redistribution and use in source and binary forms, with or without
12
                              ; modification, are permitted provided that the following conditions are met:
13
                              ;
14
                              ; 1. Redistributions of source code must retain the above copyright notice, this
15
                              ;    list of conditions and the following disclaimer.
16
                              ;
17
                              ; 2. Redistributions in binary form must reproduce the above copyright notice,
18
                              ;    this list of conditions and the following disclaimer in the documentation
19
                              ;    and/or other materials provided with the distribution.
20
                              ;
21
                              ; 3. Neither the name of the copyright holder nor the names of its
22
                              ;    contributors may be used to endorse or promote products derived from
23
                              ;    this software without specific prior written permission.
24
                              ;
25
                              ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26
                              ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
                              ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28
                              ; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
29
                              ; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
                              ; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31
                              ; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
                              ; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
33
                              ; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
                              ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 4 robfinch
                              ;
36
                              ; ============================================================================
37
                              ;
38
                              CR      EQU     $0D             ;ASCII equates
39
                              LF      EQU     $0A
40
                              TAB     EQU     $09
41
                              CTRLC   EQU     $03
42
                              CTRLH   EQU     $08
43
                              CTRLI   EQU     $09
44
                              CTRLJ   EQU     $0A
45
                              CTRLK   EQU     $0B
46
                              CTRLM   EQU $0D
47
                              CTRLS   EQU     $13
48 13 robfinch
                              CTRLT EQU $14
49 4 robfinch
                              CTRLX   EQU     $18
50
                              XON             EQU     $11
51
                              XOFF    EQU     $13
52
 
53
                              FIRST_CORE      EQU     1
54
                              MAX_TASKNO      EQU 63
55
                              DRAM_BASE       EQU $10000000
56
 
57
                              ScreenLocation          EQU             $10
58
                              ColorCodeLocation       EQU             $14
59
                              ScreenLocation2         EQU             $18
60
                              BlkcpySrc                       EQU             $1C
61
                              BlkcpyDst                       EQU             $20
62
                              Strptr                          EQU             $24
63
                              PICptr                          EQU             $28
64
                              ; Forth Area
65
                              ; 0x30-0x60
66
 
67
                              RunningID                       EQU             $800000
68
 
69
                              ; Task control blocks, room for 256 tasks
70
                              TCB_NxtRdy              EQU             $00     ; next task on ready / timeout list
71
                              TCB_PrvRdy              EQU             $04     ; previous task on ready / timeout list
72
                              TCB_NxtTCB              EQU             $08
73
                              TCB_Timeout             EQU             $0C
74
                              TCB_Priority    EQU             $10
75
                              TCB_MSGPTR_D1   EQU             $14
76
                              TCB_MSGPTR_D2   EQU             $18
77
                              TCB_hJCB                        EQU             $1C
78
                              TCB_Status              EQU             $1E
79
                              TCB_CursorRow   EQU             $20
80
                              TCB_CursorCol   EQU             $21
81
                              TCB_hWaitMbx    EQU             $22     ; handle of mailbox task is waiting at
82
                              TCB_mbq_next    EQU             $24     ; mailbox queue next
83
                              TCB_mbq_prev    EQU             $28     ; mailbox queue previous
84
                              TCB_iof_next    EQU             $2C
85
                              TCB_iof_prev    EQU             $30
86
                              TCB_SPSave              EQU             $34     ; TCB_SPSave area
87
                              TCB_mmu_map             EQU             $38
88
 
89
                              KeybdHead               EQU             $FFFFFC800
90
                              KeybdTail               EQU             $FFFFFC900
91
                              KeybdEcho               EQU             $FFFFFCA00
92
                              KeybdBad                EQU             $FFFFFCB00
93
                              KeybdAck                EQU             $FFFFFCC00
94
                              KeybdLocks              EQU             $FFFFFCD00
95
                              KeybdBuffer             EQU             $FFFFFC000      ; buffer is 16 chars
96
 
97
                              COREID  EQU             $FFFFFFFE0
98
                              MSCOUNT EQU             $FFFFFFFE4
99 13 robfinch
                              LEDS            EQU             $FFFE60001
100
                              VIA                     EQU             $FFFE60000
101
                              VIA_PA          EQU             1
102
                              VIA_DDRA        EQU             3
103
                              VIA_ACR                 EQU             11
104
                              VIA_IFR                 EQU             13
105
                              VIA_IER                 EQU             14
106
                              VIA_T3LL                EQU             18
107
                              VIA_T3LH                EQU             19
108
                              VIA_T3CMPL      EQU             20
109
                              VIA_T3CMPH      EQU             21
110 4 robfinch
                              TEXTSCR         EQU             $FFFE00000
111
                              TEXTREG         EQU             $FFFE0DF00
112
                              TEXT_COLS       EQU             0
113
                              TEXT_ROWS       EQU             1
114
                              TEXT_CURPOS     EQU             34
115 13 robfinch
                              ACIA            EQU             $FFFE30100
116
                              ACIA_TX         EQU             0
117
                              ACIA_RX         EQU             0
118
                              ACIA_STAT       EQU             1
119
                              ACIA_CMD        EQU             2
120
                              ACIA_CTRL       EQU             3
121
                              ACIA_CTRL2      EQU             11
122
                              RTC                             EQU             $FFFE30500      ; I2C
123
                              RTCBuf          EQU             $7FC0
124
 
125 4 robfinch
                              KEYBD           EQU             $FFFE30400
126
                              KEYBDCLR        EQU             $FFFE30402
127
                              PIC                     EQU             $FFFE3F000
128
                              SPRITE_CTRL             EQU             $FFFE10000
129
                              SPRITE_EN                       EQU             $3C0
130
 
131 13 robfinch
                              OUTSEMA EQU     $EF0000
132
                              SEMAABS EQU     $1000
133
                              OSSEMA  EQU     $EF0010
134
 
135 4 robfinch
                              BIOS_SCREENS    EQU     $17000000       ; $17000000 to $171FFFFF
136
 
137
                              ; EhBASIC vars:
138
                              ;
139 13 robfinch
                              NmiBase         EQU             $FF0013
140
                              IrqBase         EQU             $FF0014
141 4 robfinch
 
142
                              IOFocusNdx      EQU             $100
143
 
144 13 robfinch
                              ; These variables in global OS storage area
145
 
146
                              IOFocusList     EQU             $FF0000 ; to $FF000F
147
                              IOFocusID               EQU             $FF0010
148
                              IrqSource               EQU             $FF0011
149
                              IRQFlag                 EQU             $FF0012
150
 
151 4 robfinch
                              ; These variables use direct page access
152
                              CursorRow       EQU             $110
153
                              CursorCol       EQU             $111
154
                              CharColor       EQU             $112
155
                              ScreenColor     EQU             $113
156
                              CursorFlash     EQU             $114
157
                              KeyState1       EQU     $120
158
                              KeyState2       EQU     $121
159
                              KeyLED          EQU     $122
160
                              KeybdID         EQU     $124
161 13 robfinch
                              KeybdBlock      EQU     $126
162
                              kbdHeadRcv      EQU     $127
163
                              kbdTailRcv      EQU     $128
164
                              kbdFifo                 EQU     $40                             ; in local RAM
165
                              kbdFifoAlias    EQU     $C00040 ; to $C0007F    ; alias for $40 to $7F
166
                              SerhZero                EQU     $130
167
                              SerHeadRcv      EQU     $131
168
                              SertZero                EQU     $132
169
                              SerTailRcv      EQU     $133
170
                              SerHeadXmit     EQU     $136
171
                              SerTailXmit     EQU     $138
172
                              SerRcvXon               EQU     $139
173
                              SerRcvXoff      EQU     $140
174
                              SerRcvBuf               EQU     $BFF000 ; 4kB serial recieve buffer
175 4 robfinch
 
176 14 robfinch
                              farflag EQU             $15F
177 13 robfinch
                              asmbuf  EQU             $160    ; to $17F
178
 
179 4 robfinch
                              QNdx0           EQU             $780
180
                              QNdx1           EQU             QNdx0+2
181
                              QNdx2           EQU             QNdx1+2
182
                              QNdx3           EQU             QNdx2+2
183
                              QNdx4           EQU             QNdx3+2
184
                              FreeTCB         EQU             QNdx4+2
185
                              TimeoutList     EQU             FreeTCB+2
186
                              FreeMbx         EQU             RunningTCB + 2
187
                              nMailbox        EQU             FreeMbx + 2
188
                              FreeMsg         EQU             nMailbox + 2
189
                              nMsgBlk         EQU             FreeMsg + 2
190
 
191
 
192
                              CharOutVec      EQU             $800
193
                              CharInVec       EQU             $804
194 13 robfinch
                              CmdPromptJI     EQU     $808
195 14 robfinch
                              MonErrVec       EQU             $80C
196 4 robfinch
 
197
                              ; Register save area for monitor
198
                              mon_DSAVE       EQU             $900
199
                              mon_XSAVE       EQU             $902
200
                              mon_YSAVE       EQU             $904
201
                              mon_USAVE       EQU             $906
202
                              mon_SSAVE       EQU             $908
203
                              mon_PCSAVE      EQU             $90A
204
                              mon_DPRSAVE     EQU             $90E
205
                              mon_CCRSAVE     EQU             $90F
206
 
207
                              mon_numwka      EQU             $910
208
                              mon_r1          EQU             $920
209 13 robfinch
                              mon_r2          EQU             $924
210 4 robfinch
 
211
                              ; The ORG directive must set an address a multiple of 4 in order for the Verilog
212
                              ; output to work correctly.
213
 
214
                                      org             $FFD0AC
215
 00FFD0AC 012                             nop
216
 00FFD0AD 012                             nop
217
 00FFD0AE 012                             nop
218
                              XBLANK
219
 00FFD0AF 0C6020                          ldb             #' '
220 13 robfinch
 00FFD0B1 017001C5E                       lbsr    OUTCH
221 4 robfinch
 00FFD0B4 039                             rts
222
 
223
                                      org             $FFD0D0
224
 00FFD0D0 012                             nop
225
 00FFD0D1 012                             nop
226
                              CRLF
227
                              CRLF1:
228
 00FFD0D2 0C600D                          ldb             #CR
229 13 robfinch
 00FFD0D4 017001C3B                       lbsr    OUTCH
230 4 robfinch
 00FFD0D7 0C600A                          ldb             #LF
231 13 robfinch
 00FFD0D9 017001C36                       lbsr    OUTCH
232 4 robfinch
 00FFD0DC 039                             rts
233
 
234
                                      org             $FFD0F0
235
 00FFD0F0 012                             nop
236
 00FFD0F1 020FDF                          bra             CRLF1
237
 
238
                                      org             $FFD1DC
239
                              ONEKEY
240
 00FFD1DC 06E90F000804                    jmp             [CharInVec]
241
 
242
                                      org             $FFD2C0
243
 00FFD2C0 012                             nop
244
                              LETTER
245 13 robfinch
 00FFD2C1 017001A4E                       lbsr    OUTCH
246 4 robfinch
 00FFD2C4 039                             rts
247
 
248
                                      org             $FFD2CC
249
 00FFD2CC 012                             nop
250
 00FFD2CD 012                             nop
251
                              HEX2
252 14 robfinch
 00FFD2CE 017001139                       lbsr    DispByteAsHex
253 4 robfinch
 00FFD2D1 039                             rts
254
                              HEX4
255 14 robfinch
 00FFD2D2 01700112C                       lbsr    DispWordAsHex
256 4 robfinch
 00FFD2D5 039                             rts
257
 
258
                                      org             $FFD300
259
                              ClearScreenJmp
260 14 robfinch
 00FFD300 016000F22                       lbra    ClearScreen
261 4 robfinch
                                      org             $FFD308
262
                              HomeCursorJmp
263 14 robfinch
 00FFD308 016000F8D                       lbra    HomeCursor
264 4 robfinch
 
265 13 robfinch
                                      org             $FFD400
266 4 robfinch
 
267
                              ; Local RAM test routine
268
                              ; Checkerboard testing.
269
                              ; There is 70kB of local RAM
270
                              ; Does not use any RAM including no stack
271
 
272
                              ramtest:
273 13 robfinch
 00FFD400 18E000000                       ldy             #0
274
 00FFD403 086001                          lda             #1
275
 00FFD405 0150B7FFFE60001                 sta             LEDS
276
 00FFD40A 0CCAAA555                       ldd             #$AAA555
277 4 robfinch
                              ramtest1:
278 13 robfinch
 00FFD40D 0EDA01                          std             ,y++
279
 00FFD40F 18C008000                       cmpy    #$8000
280
 00FFD412 025FF9                          blo             ramtest1
281 4 robfinch
                                      ; now readback values and compare
282 13 robfinch
 00FFD414 18E000000                       ldy             #0
283 4 robfinch
                              ramtest3:
284 13 robfinch
 00FFD417 0ECA01                          ldd             ,y++
285
 00FFD419 183AAA555                       cmpd    #$AAA555
286
 00FFD41C 02600E                          bne             ramerr
287
 00FFD41E 18C008000                       cmpy    #$8000
288
 00FFD421 025FF4                          blo             ramtest3
289
 00FFD423 086002                          lda             #2
290
 00FFD425 0150B7FFFE60001                 sta             LEDS
291
 00FFD42A 06EC04                          jmp             ,u
292 4 robfinch
                              ramerr:
293 13 robfinch
 00FFD42C 086080                          lda             #$80
294
 00FFD42E 0150B7FFFE60001                 sta             LEDS
295
 00FFD433 08EE00000                       ldx             #TEXTSCR
296
 00FFD436 0150F6FFFFFFFE0                 ldb             COREID
297
 00FFD43B 03A                             abx
298
 00FFD43C 086046                          lda             #'F'
299
 00FFD43E 0A7804                          sta             ,x
300
 00FFD440 013                             sync
301
 00FFD441 06EC04                          jmp             ,u
302 4 robfinch
 
303 13 robfinch
                                      org             $FFE000
304 14 robfinch
 00FFE000 FFF92E                          FDB Monitor
305 13 robfinch
 00FFE002 FFE022                          FDB DumRts      ;       NEXTCMD
306
 00FFE004 FFECDA                          FDB INCH
307
 00FFE006 FFECF8                          FDB INCHE
308
 00FFE008 FFECFC                          FDB INCHEK
309
 00FFE00A FFED12                          FDB OUTCH
310 14 robfinch
 00FFE00C FFE3EE                          FDB PDATA
311
 00FFE00E FFE3E1                          FDB PCRLF
312
 00FFE010 FFE3DD                          FDB PSTRNG
313 13 robfinch
 00FFE012 FFE022                          FDB DumRts                      ; LRA
314
 00FFE014 FFE022                          FDB DumRts
315
 00FFE016 FFE022                          FDB DumRts
316
 00FFE018 FFE022                          FDB DumRts
317
 00FFE01A FFE022                          FDB DumRts                      ; VINIZ
318 14 robfinch
 00FFE01C FFE2F5                          FDB DisplayChar ;       VOUTCH
319 13 robfinch
 00FFE01E FFE022                          FDB DumRts                      ; ACINIZ
320
 00FFE020 FFE022                          FDB DumRts                      ; AOUTCH
321 4 robfinch
 
322
                              DumRts:
323 13 robfinch
 00FFE022 039                             rts
324 4 robfinch
 
325
                              ;------------------------------------------------------------------------------
326
                              ;------------------------------------------------------------------------------
327
 
328
                              start:
329 13 robfinch
 00FFE023 086FFF                          lda             #$FFF                   ; all cores can do this
330
 00FFE025 0150B7FFFE60003                 sta             VIA+VIA_DDRA
331
 00FFE02A 086055                          lda             #$55                    ; see if we can at least set LEDs
332
 00FFE02C 0150B7FFFE60001                 sta             LEDS
333
 00FFE031 086001                          lda             #1                              ; prime OS semaphore
334
 00FFE033 0B7EF1010                       sta             OSSEMA+$1000
335
 00FFE036 0CEFFE03C                       ldu             #st6                    ; U = return address
336
 00FFE039 07EFFD400                       jmp             ramtest         ; JMP dont JSR
337 4 robfinch
                              st6:
338 13 robfinch
 00FFE03C 1CE006FFF                       lds             #$6FFF          ; boot up stack area
339
 00FFE03F 0150B6FFFFFFFE0                 lda             COREID
340
 00FFE044 081001                          cmpa    #FIRST_CORE
341 4 robfinch
                              ;       beq             st8
342
                              ;       sync                                            ; halt cores other than 2
343
                              st8:
344
                              ;       bne             skip_init
345
                              ;       bsr             romToRam
346
                              ;       ldd             #st7 & $FFFF
347
                              ;       tfr             d,x
348
                              ;       jmp             ,x                              ; jump to the BIOS now in local RAM
349
                              st7:
350 14 robfinch
 00FFE046 08D159                          bsr             Delay3s         ; give some time for devices to reset
351 13 robfinch
 00FFE048 0860AA                          lda             #$AA
352
 00FFE04A 0150B7FFFE60001                 sta             LEDS
353
 00FFE04F 086001                          lda             #FIRST_CORE
354
 00FFE051 0B7FF0010                       sta             IOFocusID       ; core #2 has focus
355
 00FFE054 0B7800000                       sta             RunningID
356 14 robfinch
                                      ; Clear IO focus list
357
 00FFE057 08E000000                       ldx             #0
358
                              st9:
359
 00FFE05A 06F80A000FF0000                 clr             IOFocusList,x
360
 00FFE05F 030001                          inx
361
 00FFE061 08C000010                       cmpx    #16
362
 00FFE064 025FF4                          blo             st9
363
 00FFE066 086018                          lda             #24
364
 00FFE068 0B7FF0001                       sta             IOFocusList+FIRST_CORE
365
 
366
 00FFE06B 0860CE                          lda             #$0CE
367
 00FFE06D 097113                          sta             ScreenColor
368
 00FFE06F 097112                          sta             CharColor
369
 00FFE071 08D1B2                          bsr             ClearScreen
370
 00FFE073 0CCFFE2F5                       ldd             #DisplayChar
371
 00FFE076 0FD000800                       std             CharOutVec
372
 00FFE079 0CCFFEBE4                       ldd             #SerialPeekCharDirect
373
 00FFE07C 0FD000804                       std             CharInVec
374
 00FFE07F 0C6018                          ldb             #24                             ; request IO focus
375
 00FFE081 017000CD5                       lbsr    OSCall
376
 00FFE084 0150F6FFFFFFFE0                 ldb             COREID
377
 00FFE089 0C1001                          cmpb    #FIRST_CORE
378
 00FFE08B 02700D                          beq             init
379
 00FFE08D 020046                          bra             skip_init
380
 00FFE08F 0200AE                          bra             multi_sieve
381 4 robfinch
                              st3:
382 14 robfinch
 00FFE091 0860FF                          lda             #$FF
383
 00FFE093 0150B7FFFE60001                 sta             LEDS
384
 00FFE098 020FF7                          bra             st3
385 4 robfinch
 
386
                                      ; initialize interrupt controller
387
                                      ; first, zero out all the vectors
388
                              init:
389 14 robfinch
 00FFE09A 01700042A                       lbsr    rtc_read        ; get clock values
390
 00FFE09D 08E000127                       ldx             #kbdHeadRcv
391
 00FFE0A0 0C6020                          ldb             #32                             ; number of bytes to zero out
392 13 robfinch
                              init1:
393 14 robfinch
 00FFE0A2 06F800                          clr             ,x+
394
 00FFE0A4 05A                             decb
395
 00FFE0A5 026FFB                          bne             init1
396
 00FFE0A7 01700038E                       lbsr    TimerInit
397
 00FFE0AA 017000AC2                       lbsr    InitSerial
398
 00FFE0AD 08E000080                       ldx             #128
399
 00FFE0B0 086001                          lda             #1                      ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7)
400
 00FFE0B2 0C6001                          ldb             #FIRST_CORE                     ; serving core id
401 4 robfinch
                              st1:
402 14 robfinch
 00FFE0B4 06F809E3F000                    clr             PIC,x                   ; cause code
403
 00FFE0B8 0A7809E3F001                    sta             PIC+1,x
404
 00FFE0BC 0E7809E3F002                    stb             PIC+2,x
405
 00FFE0C0 030004                          leax    4,x
406
 00FFE0C2 08C000100                       cmpx    #256
407
 00FFE0C5 025FED                          blo             st1
408 4 robfinch
                              ;       lda             #4                              ; make the timer interrupt edge sensitive
409
                              ;       sta             PIC+4                   ; reg #4 is the edge sensitivity setting
410
                              ;       sta             PIC                             ; reg #0 is interrupt enable
411 14 robfinch
 00FFE0C7 086081                          lda             #$81                    ; make irq edge sensitive
412
 00FFE0C9 0150B7FFFE3F0FD                 sta             PIC+$FD
413
 00FFE0CE 08601F                          lda             #31                             ; enable timer interrupt
414 13 robfinch
                              ;       sta             PIC+9
415 14 robfinch
 00FFE0D0 0C6001                          ldb             #1
416
 00FFE0D2 0F7EF1000                       stb             OUTSEMA+SEMAABS ; set semaphore to 1 available slot
417 4 robfinch
                              skip_init:
418 14 robfinch
 00FFE0D5 01C0EF                          andcc   #$EF                    ; unmask irq
419
 00FFE0D7 086038                          lda             #56
420
 00FFE0D9 0150B7FFFE0DF00                 sta             TEXTREG+TEXT_COLS
421
 00FFE0DE 08601D                          lda             #29
422
 00FFE0E0 0150B7FFFE0DF01                 sta             TEXTREG+TEXT_ROWS
423
 00FFE0E5 08D13E                          bsr             ClearScreen
424
 00FFE0E7 08D1AF                          bsr             HomeCursor
425
 00FFE0E9 086005                          lda             #5
426
 00FFE0EB 0150B7FFFE60001                 sta             LEDS
427
 00FFE0F0 0CCFFE108                       ldd             #msgStartup
428
 00FFE0F3 08D2C1                          bsr             DisplayString
429
 00FFE0F5 08E000000                       ldx             #0
430
 00FFE0F8 0CC000000                       ldd             #0
431
 00FFE0FB 017000C1E                       lbsr    ShowSprites
432
 00FFE0FE 01700083F                       lbsr    KeybdInit
433
 00FFE101 0DC124                          ldd             KeybdID
434
 00FFE103 08D2FC                          bsr             DispWordAsHex
435
 00FFE105 07EFFF910                       jmp             MonitorStart
436 4 robfinch
 
437
                              msgStartup
438 14 robfinch
 00FFE108 072066036038030039020           fcb             "rf6809 12-bit System Starting.",CR,LF,0
439
 00FFE10F 03103202D062069074020
440
 00FFE116 05307907307406506D020
441
 00FFE11D 05307406107207406906E
442
 00FFE124 06702E00D00A000
443 4 robfinch
 
444
                              ;------------------------------------------------------------------------------
445
                              ; The checkpoint register must be cleared within 1 second or a NMI interrupt
446
                              ; will occur. checkpoint should be called with a JSR so that the global ROM
447
                              ; routine is called.
448
                              ;
449
                              ; Modifies:
450
                              ;               none
451
                              ;------------------------------------------------------------------------------
452
 
453
                              checkpoint:
454 14 robfinch
 00FFE129 01507FFFFFFFFE1                 clr             $FFFFFFFE1      ; writing any value will do
455
 00FFE12E 039                             rts
456 4 robfinch
 
457
                              ;------------------------------------------------------------------------------
458
                              ; Copy the system ROM to local RAM
459
                              ; Running the code from local RAM is probably an order of magnitude faster
460
                              ; then running from the global ROM. It also reduces the network traffic to
461
                              ; run from local RAM.
462
                              ;
463
                              ; Modifies:
464
                              ;               d,x,y
465
                              ;------------------------------------------------------------------------------
466
 
467
                              romToRam:
468 14 robfinch
 00FFE12F 08EFFC000                       ldx             #$FFC000
469
 00FFE132 18E00C000                       ldy             #$00C000
470 4 robfinch
                              romToRam1:
471 14 robfinch
 00FFE135 0EC801                          ldd             ,x++
472
 00FFE137 0EDA01                          std             ,y++
473
 00FFE139 08C000000                       cmpx    #0
474
 00FFE13C 026FF7                          bne             romToRam1
475
 00FFE13E 039                             rts
476 4 robfinch
 
477
                              ;------------------------------------------------------------------------------
478
                              ; Multi-core sieve program.
479
                              ;------------------------------------------------------------------------------
480
 
481
                              ; First fill screen chars with 'P' indicating prime positions
482
                              ; Each core is responsible for the Nth position where N is the
483
                              ; core number minus two.
484
                              ;
485
                              multi_sieve:
486 14 robfinch
 00FFE13F 086050                          lda             #'P'                                    ; indicate prime
487
 00FFE141 0150F6FFFFFFFE0                 ldb             COREID                          ; find out which core we are
488
 00FFE146 0C0001                          subb    #FIRST_CORE
489
 00FFE148 08E000000                       ldx             #0                                              ; start at first char of screen
490
 00FFE14B 03A                             abx
491 4 robfinch
                              multi_sieve3:
492 14 robfinch
 00FFE14C 0A7809E00000                    sta             TEXTSCR,x                       ; store 'P'
493
 00FFE150 030008                          leax    8,x                                             ; advance to next position
494
 00FFE152 08C000FFF                       cmpx    #4095
495
 00FFE155 025FF5                          blo             multi_sieve3
496
 00FFE157 0BDFFE129                       jsr             checkpoint
497 4 robfinch
*** warning 1: Long branch within short branch range could be optimized
498 14 robfinch
 00FFE15A 0CB002                          addb    #2                                              ; start sieve at 2 (core id)
499
 00FFE15C 08604E                          lda             #'N'                                    ; flag position value of 'N' for non-prime
500 4 robfinch
                              multi_sieve2:
501 14 robfinch
 00FFE15E 08E000000                       ldx             #0
502
 00FFE161 03A                             abx                                                                     ; skip the first position - might be prime
503 4 robfinch
                              multi_sieve1:
504 14 robfinch
 00FFE162 03A                             abx                                                                     ; increment
505
 00FFE163 0A7809E00000                    sta             TEXTSCR,x
506
 00FFE167 08C000FFF                       cmpx    #4095
507
 00FFE16A 025FF6                          blo             multi_sieve1
508
 00FFE16C 0BDFFE129                       jsr             checkpoint
509 4 robfinch
*** warning 1: Long branch within short branch range could be optimized
510 14 robfinch
 00FFE16F 0CB008                          addb    #8                                              ; number of cores working on it
511
 00FFE171 0C1FF0                          cmpb    #4080
512
 00FFE173 025FE9                          blo             multi_sieve2
513 4 robfinch
                              multi_sieve4:                                   ; hang machine
514 14 robfinch
 00FFE175 013                             sync
515
 00FFE176 0160017B5                       lbra    Monitor
516 4 robfinch
 
517 13 robfinch
                              ;------------------------------------------------------------------------------
518
                              ; Single core sieve.
519
                              ;------------------------------------------------------------------------------
520
 
521 4 robfinch
                              sieve:
522 14 robfinch
 00FFE179 086050                          lda             #'P'                                    ; indicate prime
523
 00FFE17B 08E000000                       ldx             #0                                              ; start at first char of screen
524 4 robfinch
                              sieve3:
525 14 robfinch
 00FFE17E 0A7809E00000                    sta             TEXTSCR,x                       ; store 'P'
526
 00FFE182 030001                          inx                                                                     ; advance to next position
527
 00FFE184 08C000FFF                       cmpx    #4095
528
 00FFE187 025FF5                          blo             sieve3
529
 00FFE189 0C6002                          ldb             #2                                              ; start sieve at 2
530
 00FFE18B 08604E                          lda             #'N'                                    ; flag position value of 'N' for non-prime
531 4 robfinch
                              sieve2:
532 14 robfinch
 00FFE18D 08E000000                       ldx             #0
533
 00FFE190 03A                             abx                                                                     ; skip the first position - might be prime
534 4 robfinch
                              sieve1:
535 14 robfinch
 00FFE191 03A                             abx                                                                     ; increment
536
 00FFE192 0A7809E00000                    sta             TEXTSCR,x
537
 00FFE196 08C000FFF                       cmpx    #4095
538
 00FFE199 025FC7                          blo             multi_sieve1
539
 00FFE19B 05C                             incb                                                            ; number of cores working on it
540
 00FFE19C 0C1FF0                          cmpb    #4080
541
 00FFE19E 025FED                          blo             sieve2
542 4 robfinch
                              sieve4:                                                         ; hang machine
543 14 robfinch
 00FFE1A0 039                             rts
544 4 robfinch
 
545
                              ;------------------------------------------------------------------------------
546
                              ; Three second delay for user convenience and to allow some devices time to
547
                              ; reset.
548
                              ;------------------------------------------------------------------------------
549
 
550
                              Delay3s:
551 14 robfinch
 00FFE1A1 0CC895440                       ldd             #9000000
552 4 robfinch
                              dly3s1:
553 14 robfinch
 00FFE1A4 0C10FF                          cmpb    #$FF
554
 00FFE1A6 026000                          bne             dly3s2
555 4 robfinch
                              dly3s2:
556 14 robfinch
 00FFE1A8 0150B7FFFE60001                 sta             LEDS
557
 00FFE1AD 083000001                       subd    #1
558
 00FFE1B0 026FF2                          bne             dly3s1
559
 00FFE1B2 039                             rts
560 4 robfinch
 
561
                              ;------------------------------------------------------------------------------
562
                              ;------------------------------------------------------------------------------
563
                              ShiftLeft5:
564 14 robfinch
 00FFE1B3 058                             aslb
565
 00FFE1B4 049                             rola
566
 00FFE1B5 058                             aslb
567
 00FFE1B6 049                             rola
568
 00FFE1B7 058                             aslb
569
 00FFE1B8 049                             rola
570
 00FFE1B9 058                             aslb
571
 00FFE1BA 049                             rola
572
 00FFE1BB 058                             aslb
573
 00FFE1BC 049                             rola
574
 00FFE1BD 039                             rts
575 4 robfinch
 
576
                              ;------------------------------------------------------------------------------
577 13 robfinch
                              ; Parameters:
578
                              ;               b = core id of core to copy
579 4 robfinch
                              ;------------------------------------------------------------------------------
580
                              ;
581
                              CopyVirtualScreenToScreen:
582 14 robfinch
 00FFE1BE 034076                          pshs    d,x,y,u
583 13 robfinch
                                      ; Compute virtual screen location for core passed in accb.
584 14 robfinch
 00FFE1C0 01F098                          tfr             b,a
585
 00FFE1C2 048                             asla
586
 00FFE1C3 048                             asla
587
 00FFE1C4 048                             asla
588
 00FFE1C5 048                             asla
589
 00FFE1C6 08AC00                          ora             #$C00
590
 00FFE1C8 05F                             clrb
591
 00FFE1C9 01F001                          tfr             d,x
592
 00FFE1CB 034006                          pshs    d
593
 00FFE1CD 18EE00000                       ldy             #TEXTSCR
594
 00FFE1D0 0CE00032C                       ldu             #56*29/2
595 4 robfinch
                              cv2s1:
596 14 robfinch
 00FFE1D3 0EC801                          ldd             ,x++
597
 00FFE1D5 0EDA01                          std             ,y++
598
 00FFE1D7 0335FF                          leau    -1,u
599
 00FFE1D9 283000000                       cmpu    #0
600
 00FFE1DC 026FF5                          bne             cv2s1
601 4 robfinch
                                      ; reset the cursor position in the text controller
602 14 robfinch
 00FFE1DE 035010                          puls    x
603
 00FFE1E0 0E6808110                       ldb             CursorRow,x
604
 00FFE1E3 086038                          lda             #56
605
 00FFE1E5 03D                             mul
606
 00FFE1E6 01F002                          tfr             d,y
607
 00FFE1E8 0E6808111                       ldb             CursorCol,x
608
 00FFE1EB 01F021                          tfr             y,x
609
 00FFE1ED 03A                             abx
610
 00FFE1EE 0150BFFFFE0DF22                 stx             TEXTREG+TEXT_CURPOS
611
 00FFE1F3 0350F6                          puls    d,x,y,u,pc
612 4 robfinch
 
613
                              ;------------------------------------------------------------------------------
614
                              ;------------------------------------------------------------------------------
615
                              ;
616
                              CopyScreenToVirtualScreen:
617 14 robfinch
 00FFE1F5 034076                          pshs    d,x,y,u
618
 00FFE1F7 08D08D                          bsr             GetScreenLocation
619
 00FFE1F9 01F002                          tfr             d,y
620
 00FFE1FB 08EE00000                       ldx             #TEXTSCR
621
 00FFE1FE 0CE00032C                       ldu             #56*29/2
622 4 robfinch
                              cs2v1:
623 14 robfinch
 00FFE201 0EC801                          ldd             ,x++
624
 00FFE203 0EDA01                          std             ,y++
625
 00FFE205 0335FF                          leau    -1,u
626
 00FFE207 283000000                       cmpu    #0
627
 00FFE20A 026FF5                          bne             cs2v1
628
 00FFE20C 0350F6                          puls    d,x,y,u,pc
629 4 robfinch
 
630
                              ;------------------------------------------------------------------------------
631
                              ;------------------------------------------------------------------------------
632 14 robfinch
 00FFE20E 054045058054053043052           fcb             "TEXTSCR "
633
 00FFE215 020
634
 00FFE216 FFE220                          fcw             TextOpen
635
 00FFE218 FFE221                          fcw             TextClose
636
 00FFE21A FFE222                          fcw             TextRead
637
 00FFE21C FFE223                          fcw             TextWrite
638
 00FFE21E FFE224                          fcw             TextSeek
639 4 robfinch
 
640
                              TextOpen:
641 14 robfinch
 00FFE220 039                             rts
642 4 robfinch
                              TextClose:
643 14 robfinch
 00FFE221 039                             rts
644 4 robfinch
                              TextRead:
645 14 robfinch
 00FFE222 039                             rts
646 4 robfinch
                              TextWrite:
647 14 robfinch
 00FFE223 039                             rts
648 4 robfinch
                              TextSeek:
649 14 robfinch
 00FFE224 039                             rts
650 4 robfinch
 
651
                              ;------------------------------------------------------------------------------
652
                              ; Clear the screen and the screen color memory
653
                              ; We clear the screen to give a visual indication that the system
654
                              ; is working at all.
655
                              ;
656
                              ; Modifies:
657
                              ;               none
658
                              ;------------------------------------------------------------------------------
659
 
660
                              ClearScreen:
661 14 robfinch
 00FFE225 034076                          pshs    d,x,y,u
662
 00FFE227 08E000658                       ldx             #56*29
663
 00FFE22A 01F013                          tfr             x,u
664
 00FFE22C 08D058                          bsr             GetScreenLocation
665
 00FFE22E 01F002                          tfr             d,y
666
 00FFE230 0C6020                          ldb             #' '                            ; space char
667 4 robfinch
                              cs1:
668 14 robfinch
 00FFE232 0E7A00                          stb             ,y+                                     ; set text to space
669
 00FFE234 0301FF                          leax    -1,x                            ; decrement x
670
 00FFE236 026FFA                          bne             cs1
671
 00FFE238 0150F6FFFFFFFE0                 ldb             COREID                  ; update colors only if we have focus
672
 00FFE23D 0F1FF0010                       cmpb    IOFocusID
673
 00FFE240 02000D                          bra             cs3
674
 00FFE242 18EE02000                       ldy             #TEXTSCR+$2000
675 4 robfinch
                              ;       lda             CharColor
676 14 robfinch
 00FFE245 0860CE                          lda             #$0CE
677
 00FFE247 01F031                          tfr             u,x                                     ; get back count
678 4 robfinch
                              cs2:
679 14 robfinch
 00FFE249 0A7A00                          sta             ,y+
680
 00FFE24B 0301FF                          dex                                                             ; decrement x
681
 00FFE24D 026FFA                          bne             cs2
682 4 robfinch
                              cs3:
683 14 robfinch
 00FFE24F 0350F6                          puls    d,x,y,u,pc
684 4 robfinch
 
685
                              ;------------------------------------------------------------------------------
686
                              ; Scroll text on the screen upwards
687
                              ;
688
                              ; Modifies:
689
                              ;               none
690
                              ;------------------------------------------------------------------------------
691
 
692
                              ScrollUp:
693 14 robfinch
 00FFE251 034076                          pshs    d,x,y,u
694
 00FFE253 18E00032B                       ldy             #(56*29-1)/2    ; y = num chars/2 to move
695
 00FFE256 08D02E                          bsr             GetScreenLocation
696
 00FFE258 01F001                          tfr             d,x
697
 00FFE25A 01F003                          tfr             d,u
698
 00FFE25C 030038                          leax    56,x                    ; x = index to source row
699 4 robfinch
                              scrup1:
700 14 robfinch
 00FFE25E 0EC801                          ldd             ,x++                    ; move 2 characters
701
 00FFE260 0EDC01                          std             ,u++
702
 00FFE262 0313FF                          dey
703
 00FFE264 026FF8                          bne             scrup1
704
 00FFE266 08601D                          lda             #29
705
 00FFE268 08D002                          bsr             BlankLine
706
 00FFE26A 0350F6                          puls    d,x,y,u,pc
707 4 robfinch
 
708
                              ;------------------------------------------------------------------------------
709
                              ; Blank out a line on the display
710
                              ;
711
                              ; Modifies:
712
                              ;               none
713
                              ; Parameters:
714
                              ;       acca = line number to blank
715
                              ;------------------------------------------------------------------------------
716
 
717
                              BlankLine:
718 14 robfinch
 00FFE26C 034016                          pshs    d,x
719
 00FFE26E 034002                          pshs    a
720
 00FFE270 08D014                          bsr             GetScreenLocation
721
 00FFE272 01F001                          tfr             d,x
722
 00FFE274 035002                          puls    a
723
 00FFE276 0C6038                          ldb             #56             ; b = # chars to blank out from video controller
724
 00FFE278 03D                             mul                                     ; d = screen index (row# * #cols)
725
 00FFE279 03080B                          leax    d,x
726
 00FFE27B 086020                          lda             #' '
727
 00FFE27D 0C6038                          ldb             #56             ; b = # chars to blank out from video controller
728 4 robfinch
                              blnkln1:
729 14 robfinch
 00FFE27F 0A7800                          sta             ,x+
730
 00FFE281 05A                             decb
731
 00FFE282 026FFB                          bne             blnkln1
732
 00FFE284 035096                          puls    d,x,pc
733 4 robfinch
 
734
                              ;------------------------------------------------------------------------------
735
                              ; Get the location of the screen memory. The location
736
                              ; depends on whether or not the task has the output focus.
737
                              ;
738
                              ; Modifies:
739
                              ;               d
740
                              ; Retuns:
741
                              ;               d = screen location
742
                              ;------------------------------------------------------------------------------
743
 
744
                              GetScreenLocation:
745 14 robfinch
 00FFE286 0150B6FFFFFFFE0                 lda             COREID                  ; which core are we?
746
 00FFE28B 0B1FF0010                       cmpa    IOFocusID               ; do we have the IO focus
747
 00FFE28E 026004                          bne             gsl1                            ; no, go pick virtual screen address
748
 00FFE290 0CCE00000                       ldd             #TEXTSCR                ; yes, we update the real screen
749
 00FFE293 039                             rts
750 4 robfinch
                              gsl1:
751 14 robfinch
 00FFE294 0CC007800                       ldd             #$7800
752
 00FFE297 039                             rts
753 4 robfinch
 
754
                              ;------------------------------------------------------------------------------
755
                              ; HomeCursor
756
                              ; Set the cursor location to the top left of the screen.
757
                              ;
758
                              ; Modifies:
759
                              ;               none
760
                              ;------------------------------------------------------------------------------
761
 
762
                              HomeCursor:
763 14 robfinch
 00FFE298 034016                          pshs    d,x
764
 00FFE29A 00F110                          clr             CursorRow
765
 00FFE29C 00F111                          clr             CursorCol
766
 00FFE29E 0150F6FFFFFFFE0                 ldb             COREID
767
 00FFE2A3 0F1FF0010                       cmpb    IOFocusID
768
 00FFE2A6 026006                          bne             hc1
769
 00FFE2A8 04F                             clra
770
 00FFE2A9 0150B7FFFE0DF22                 sta             TEXTREG+TEXT_CURPOS
771 4 robfinch
                              hc1:
772 14 robfinch
 00FFE2AE 035096                          puls    d,x,pc
773 4 robfinch
 
774
                              ;------------------------------------------------------------------------------
775
                              ; Update the cursor position in the text controller based on the
776
                              ;  CursorRow,CursorCol.
777
                              ;
778
                              ; Modifies:
779
                              ;               none
780
                              ;------------------------------------------------------------------------------
781
                              ;
782
                              UpdateCursorPos:
783 14 robfinch
 00FFE2B0 034016                          pshs    d,x
784
 00FFE2B2 0150F6FFFFFFFE0                 ldb             COREID                          ; update cursor position in text controller
785
 00FFE2B7 0F1FF0010                       cmpb    IOFocusID                       ; only for the task with the output focus
786
 00FFE2BA 026014                          bne             ucp1
787
 00FFE2BC 096110                          lda             CursorRow
788
 00FFE2BE 08403F                          anda    #$3F                                    ; limit of 63 rows
789
 00FFE2C0 0150F6FFFE0DF00                 ldb             TEXTREG+TEXT_COLS
790
 00FFE2C5 03D                             mul
791
 00FFE2C6 01F001                          tfr             d,x
792
 00FFE2C8 0D6111                          ldb             CursorCol
793
 00FFE2CA 03A                             abx
794
 00FFE2CB 0150BFFFFE0DF22                 stx             TEXTREG+TEXT_CURPOS
795 4 robfinch
                              ucp1:
796 14 robfinch
 00FFE2D0 035096                          puls    d,x,pc
797 4 robfinch
 
798
                              ;------------------------------------------------------------------------------
799
                              ; Calculate screen memory location from CursorRow,CursorCol.
800
                              ; Also refreshes the cursor location.
801
                              ;
802
                              ; Modifies:
803
                              ;               d
804
                              ; Returns:
805
                              ;       d = screen location
806
                              ;------------------------------------------------------------------------------
807
                              ;
808
                              CalcScreenLoc:
809 14 robfinch
 00FFE2D2 034010                          pshs    x
810
 00FFE2D4 096110                          lda             CursorRow
811
 00FFE2D6 0C6038                          ldb             #56
812
 00FFE2D8 03D                             mul
813
 00FFE2D9 01F001                          tfr             d,x
814
 00FFE2DB 0D6111                          ldb             CursorCol
815
 00FFE2DD 03A                             abx
816
 00FFE2DE 0150F6FFFFFFFE0                 ldb             COREID                          ; update cursor position in text controller
817
 00FFE2E3 0F1FF0010                       cmpb    IOFocusID                       ; only for the task with the output focus
818
 00FFE2E6 026005                          bne             csl1
819
 00FFE2E8 0150BFFFFE0DF22                 stx             TEXTREG+TEXT_CURPOS
820 4 robfinch
                              csl1:
821 14 robfinch
 00FFE2ED 08DF97                          bsr             GetScreenLocation
822
 00FFE2EF 03080B                          leax    d,x
823
 00FFE2F1 01F010                          tfr             x,d
824
 00FFE2F3 035090                          puls    x,pc
825 4 robfinch
 
826
                              ;------------------------------------------------------------------------------
827
                              ; Display a character on the screen.
828
                              ; If the task doesn't have the I/O focus then the character is written to
829
                              ; the virtual screen.
830
                              ;
831
                              ; Modifies:
832
                              ;               none
833
                              ; Parameters:
834
                              ;       accb = char to display
835
                              ;------------------------------------------------------------------------------
836
                              ;
837
                              DisplayChar:
838 14 robfinch
 00FFE2F5 017000910                       lbsr    SerialPutChar
839
 00FFE2F8 034016                          pshs    d,x
840
 00FFE2FA 0C100D                          cmpb    #CR                                     ; carriage return ?
841
 00FFE2FC 026007                          bne             dccr
842
 00FFE2FE 00F111                          clr             CursorCol               ; just set cursor column to zero on a CR
843
 00FFE300 08DFAE                          bsr             UpdateCursorPos
844 4 robfinch
                              dcx14:
845 14 robfinch
 00FFE302 01600008C                       lbra            dcx4
846 4 robfinch
                              dccr:
847 14 robfinch
 00FFE305 0C1091                          cmpb    #$91                            ; cursor right ?
848
 00FFE307 02600D                          bne             dcx6
849
 00FFE309 096111                          lda             CursorCol
850
 00FFE30B 081038                          cmpa    #56
851
 00FFE30D 024003                          bhs             dcx7
852
 00FFE30F 04C                             inca
853
 00FFE310 097111                          sta             CursorCol
854 4 robfinch
                              dcx7:
855 14 robfinch
 00FFE312 08DF9C                          bsr             UpdateCursorPos
856
 00FFE314 035096                          puls    d,x,pc
857 4 robfinch
                              dcx6:
858 14 robfinch
 00FFE316 0C1090                          cmpb    #$90                            ; cursor up ?
859
 00FFE318 026009                          bne             dcx8
860
 00FFE31A 096110                          lda             CursorRow
861
 00FFE31C 027FF4                          beq             dcx7
862
 00FFE31E 04A                             deca
863
 00FFE31F 097110                          sta             CursorRow
864
 00FFE321 020FEF                          bra             dcx7
865 4 robfinch
                              dcx8:
866 14 robfinch
 00FFE323 0C1093                          cmpb    #$93                            ; cursor left ?
867
 00FFE325 026009                          bne             dcx9
868
 00FFE327 096111                          lda             CursorCol
869
 00FFE329 027FE7                          beq             dcx7
870
 00FFE32B 04A                             deca
871
 00FFE32C 097111                          sta             CursorCol
872
 00FFE32E 020FE2                          bra             dcx7
873 4 robfinch
                              dcx9:
874 14 robfinch
 00FFE330 0C1092                          cmpb    #$92                            ; cursor down ?
875
 00FFE332 02600B                          bne             dcx10
876
 00FFE334 096110                          lda             CursorRow
877
 00FFE336 08101D                          cmpa    #29
878
 00FFE338 027FD8                          beq             dcx7
879
 00FFE33A 04C                             inca
880
 00FFE33B 097110                          sta             CursorRow
881
 00FFE33D 020FD3                          bra             dcx7
882 4 robfinch
                              dcx10:
883 14 robfinch
 00FFE33F 0C1094                          cmpb    #$94                            ; cursor home ?
884
 00FFE341 02600C                          bne             dcx11
885
 00FFE343 096111                          lda             CursorCol
886
 00FFE345 027004                          beq             dcx12
887
 00FFE347 00F111                          clr             CursorCol
888
 00FFE349 020FC7                          bra             dcx7
889 4 robfinch
                              dcx12:
890 14 robfinch
 00FFE34B 00F110                          clr             CursorRow
891
 00FFE34D 020FC3                          bra             dcx7
892 4 robfinch
                              dcx11:
893 14 robfinch
 00FFE34F 0C1099                          cmpb    #$99                            ; delete ?
894
 00FFE351 026008                          bne             dcx13
895
 00FFE353 08DF7D                          bsr             CalcScreenLoc
896
 00FFE355 01F001                          tfr             d,x
897
 00FFE357 096111                          lda             CursorCol               ; acc = cursor column
898
 00FFE359 020011                          bra             dcx5
899 4 robfinch
                              dcx13
900 14 robfinch
 00FFE35B 0C1008                          cmpb    #CTRLH                  ; backspace ?
901
 00FFE35D 02601E                          bne             dcx3
902
 00FFE35F 096111                          lda             CursorCol
903
 00FFE361 02702E                          beq             dcx4
904
 00FFE363 04A                             deca
905
 00FFE364 097111                          sta             CursorCol
906
 00FFE366 08DF6A                          bsr             CalcScreenLoc
907
 00FFE368 01F001                          tfr             d,x
908
 00FFE36A 096111                          lda             CursorCol
909 4 robfinch
                              dcx5:
910 14 robfinch
 00FFE36C 0E6001                          ldb             1,x
911
 00FFE36E 0E7801                          stb             ,x++
912
 00FFE370 04C                             inca
913
 00FFE371 081038                          cmpa    #56
914
 00FFE373 025FF7                          blo             dcx5
915
 00FFE375 0C6020                          ldb             #' '
916
 00FFE377 0301FF                          dex
917
 00FFE379 0E7804                          stb             ,x
918
 00FFE37B 020014                          bra             dcx4
919 4 robfinch
                              dcx3:
920 14 robfinch
 00FFE37D 0C100A                          cmpb    #LF                             ; linefeed ?
921
 00FFE37F 02700E                          beq             dclf
922
 00FFE381 034004                          pshs    b
923
 00FFE383 08DF4D                          bsr     CalcScreenLoc
924
 00FFE385 01F001                          tfr             d,x
925
 00FFE387 035004                          puls    b
926
 00FFE389 0E7804                          stb             ,x
927 4 robfinch
                                      ; ToDo character color
928
                              ;       lda             CharColor
929
                              ;       sta             $2000,x
930 14 robfinch
 00FFE38B 08D006                          bsr             IncCursorPos
931
 00FFE38D 020002                          bra             dcx4
932 4 robfinch
                              dclf:
933 14 robfinch
 00FFE38F 08D011                          bsr             IncCursorRow
934 4 robfinch
                              dcx4:
935 14 robfinch
 00FFE391 035096                          puls    d,x,pc
936 4 robfinch
 
937
                              ;------------------------------------------------------------------------------
938
                              ; Increment the cursor position, scroll the screen if needed.
939
                              ;
940
                              ; Modifies:
941
                              ;               none
942
                              ;------------------------------------------------------------------------------
943
 
944
                              IncCursorPos:
945 14 robfinch
 00FFE393 034016                          pshs    d,x
946
 00FFE395 096111                          lda             CursorCol
947
 00FFE397 04C                             inca
948
 00FFE398 097111                          sta             CursorCol
949
 00FFE39A 081038                          cmpa    #56
950
 00FFE39C 025014                          blo             icc1
951
 00FFE39E 00F111                          clr             CursorCol               ; column = 0
952
 00FFE3A0 020002                          bra             icr1
953 4 robfinch
                              IncCursorRow:
954 14 robfinch
 00FFE3A2 034016                          pshs    d,x
955 4 robfinch
                              icr1:
956 14 robfinch
 00FFE3A4 096110                          lda             CursorRow
957
 00FFE3A6 04C                             inca
958
 00FFE3A7 097110                          sta             CursorRow
959
 00FFE3A9 08101D                          cmpa    #29
960
 00FFE3AB 025005                          blo             icc1
961
 00FFE3AD 04A                             deca                                                    ; backup the cursor row, we are scrolling up
962
 00FFE3AE 097110                          sta             CursorRow
963
 00FFE3B0 08DE9F                          bsr             ScrollUp
964 4 robfinch
                              icc1:
965 14 robfinch
 00FFE3B2 08DEFC                          bsr             UpdateCursorPos
966 4 robfinch
                              icc2:
967 14 robfinch
 00FFE3B4 035096                          puls    d,x,pc
968 4 robfinch
 
969
                              ;------------------------------------------------------------------------------
970
                              ; Display a string on the screen.
971
                              ;
972
                              ; Modifies:
973
                              ;               none
974
                              ; Parameters:
975
                              ;               d = pointer to string
976
                              ;------------------------------------------------------------------------------
977
                              ;
978
                              DisplayString:
979 14 robfinch
 00FFE3B6 034016                          pshs    d,x
980
 00FFE3B8 01F001                          tfr             d,x
981 13 robfinch
                              dspj2:                                          ; lock semaphore for access
982 14 robfinch
 00FFE3BA 0B6EF0001                       lda             OUTSEMA+1
983
 00FFE3BD 027FFB                          beq             dspj2
984 4 robfinch
                              dspj1B:
985 14 robfinch
 00FFE3BF 0E6800                          ldb             ,x+                             ; move string char into acc
986
 00FFE3C1 027005                          beq             dsretB          ; is it end of string ?
987
 00FFE3C3 01700094C                       lbsr    OUTCH                   ; display character
988
 00FFE3C6 020FF7                          bra             dspj1B
989 4 robfinch
                              dsretB:
990 14 robfinch
 00FFE3C8 07FEF0001                       clr             OUTSEMA+1       ; unlock semaphore
991
 00FFE3CB 035096                          puls    d,x,pc
992 4 robfinch
 
993
                              DisplayStringCRLF:
994 14 robfinch
 00FFE3CD 034006                          pshs    d
995
 00FFE3CF 08DFE5                          bsr             DisplayString
996
 00FFE3D1 0C600D                          ldb             #CR
997
 00FFE3D3 01700093C                       lbsr    OUTCH
998
 00FFE3D6 0C600A                          ldb             #LF
999
 00FFE3D8 017000937                       lbsr    OUTCH
1000
 00FFE3DB 035086                          puls    d,pc
1001 4 robfinch
 
1002
                              ;
1003
                              ; PRINT CR, LF, STRING
1004
                              ;
1005
                              PSTRNG
1006 14 robfinch
 00FFE3DD 08D002                          BSR             PCRLF
1007
 00FFE3DF 02000D                          BRA             PDATA
1008 4 robfinch
                              PCRLF
1009 14 robfinch
 00FFE3E1 034010                          PSHS    X
1010
 00FFE3E3 08EFFE3F5                       LDX             #CRLFST
1011
 00FFE3E6 08D006                          BSR             PDATA
1012
 00FFE3E8 035010                          PULS    X
1013
 00FFE3EA 039                             RTS
1014 4 robfinch
 
1015
                              PRINT
1016 14 robfinch
 00FFE3EB 0BDFFED12                       JSR             OUTCH
1017 4 robfinch
                              PDATA
1018 14 robfinch
 00FFE3EE 0E6800                          LDB             ,X+
1019
 00FFE3F0 0C1004                          CMPB    #$04
1020
 00FFE3F2 026FF7                          BNE             PRINT
1021
 00FFE3F4 039                             RTS
1022 4 robfinch
 
1023
                              CRLFST
1024 14 robfinch
 00FFE3F5 00D00A004                       fcb     CR,LF,4
1025 4 robfinch
 
1026
                              DispDWordAsHex:
1027 14 robfinch
 00FFE3F8 08D007                          bsr             DispWordAsHex
1028
 00FFE3FA 01E001                          exg             d,x
1029
 00FFE3FC 08D003                          bsr             DispWordAsHex
1030
 00FFE3FE 01E001                          exg             d,x
1031
 00FFE400 039                             rts
1032 4 robfinch
 
1033
                              DispWordAsHex:
1034 14 robfinch
 00FFE401 01E089                          exg             a,b
1035
 00FFE403 08D005                          bsr             DispByteAsHex
1036
 00FFE405 01E089                          exg             a,b
1037
 00FFE407 08D001                          bsr             DispByteAsHex
1038
 00FFE409 039                             rts
1039 4 robfinch
 
1040
                              DispByteAsHex:
1041 14 robfinch
 00FFE40A 034004                    pshs  b
1042
 00FFE40C 054                             lsrb
1043
 00FFE40D 054                             lsrb
1044
 00FFE40E 054                             lsrb
1045
 00FFE40F 054                             lsrb
1046
 00FFE410 054                             lsrb
1047
 00FFE411 054                             lsrb
1048
 00FFE412 054                             lsrb
1049
 00FFE413 054                             lsrb
1050
 00FFE414 08D00C                          bsr             DispNyb
1051
 00FFE416 035004                          puls    b
1052
 00FFE418 034004                          pshs    b
1053
 00FFE41A 054                             lsrb
1054
 00FFE41B 054                             lsrb
1055
 00FFE41C 054                             lsrb
1056
 00FFE41D 054                             lsrb
1057
 00FFE41E 08D002                          bsr             DispNyb
1058
 00FFE420 035004                          puls    b
1059 4 robfinch
 
1060
                              DispNyb
1061 14 robfinch
 00FFE422 034004                          pshs    b
1062
 00FFE424 0C400F                          andb    #$0F
1063
 00FFE426 0C100A                          cmpb    #10
1064
 00FFE428 025007                          blo             DispNyb1
1065
 00FFE42A 0CB037                          addb    #'A'-10
1066
 00FFE42C 0170008E3                       lbsr    OUTCH
1067
 00FFE42F 035084                          puls    b,pc
1068 4 robfinch
                              DispNyb1
1069 14 robfinch
 00FFE431 0CB030                          addb    #'0'
1070
 00FFE433 0170008DC                       lbsr    OUTCH
1071
 00FFE436 035084                          puls    b,pc
1072 4 robfinch
 
1073
                              ;==============================================================================
1074 13 robfinch
                              ; Timer
1075
                              ;==============================================================================
1076
 
1077
                              ; ============================================================================
1078
                              ;        __
1079
                              ;   \\__/ o\    (C) 2022  Robert Finch, Waterloo
1080
                              ;    \  __ /    All rights reserved.
1081
                              ;     \/_//     robfinch@opencores.org
1082
                              ;       ||
1083
                              ;
1084
                              ;
1085
                              ; Timer routines for a WDC6522 compatible circuit.
1086
                              ;
1087
                              ; This source file is free software: you can redistribute it and/or modify
1088
                              ; it under the terms of the GNU Lesser General Public License as published
1089
                              ; by the Free Software Foundation, either version 3 of the License, or
1090
                              ; (at your option) any later version.
1091
                              ;
1092
                              ; This source file is distributed in the hope that it will be useful,
1093
                              ; but WITHOUT ANY WARRANTY; without even the implied warranty of
1094
                              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1095
                              ; GNU General Public License for more details.
1096
                              ;
1097
                              ; You should have received a copy of the GNU General Public License
1098
                              ; along with this program.  If not, see .
1099
                              ;
1100
                              ; ============================================================================
1101
                              ;
1102
                              TimerInit:
1103 14 robfinch
 00FFE438 0CC061A80                       ldd             #$61A80                                 ; compare to 400000 (100 Hz assuming 40MHz clock)
1104
 00FFE43B 0150F7FFFE60014                 stb             VIA+VIA_T3CMPL
1105
 00FFE440 0150B7FFFE60015                 sta             VIA+VIA_T3CMPH
1106
 00FFE445 01507FFFFE60012                 clr             VIA+VIA_T3LL
1107
 00FFE44A 01507FFFFE60013                 clr             VIA+VIA_T3LH
1108
 00FFE44F 0150B6FFFE6000B                 lda             VIA+VIA_ACR                     ; set continuous mode for timer
1109
 00FFE454 08A100                          ora             #$100
1110
 00FFE456 0150B7FFFE6000B                 sta             VIA+VIA_ACR                     ; enable timer #3 interrupts
1111
 00FFE45B 086810                          lda             #$810
1112
 00FFE45D 0150B7FFFE6000E                 sta             VIA+VIA_IER
1113
 00FFE462 039                             rts
1114 13 robfinch
 
1115
                              TimerIRQ:
1116
                                      ; Reset the edge sense circuit in the PIC
1117 14 robfinch
 00FFE463 08601F                          lda             #31                                                     ; Timer is IRQ #31
1118
 00FFE465 0B7FF0011                       sta             IrqSource               ; stuff a byte indicating the IRQ source for PEEK()
1119
 00FFE468 0150B7FFFE3F010                 sta             PIC+16                                  ; register 16 is edge sense reset reg
1120
 00FFE46D 0150B6FFFE6000D                 lda             VIA+VIA_IFR
1121
 00FFE472 02A011                          bpl             notTimerIRQ
1122
 00FFE474 085800                          bita    #$800
1123
 00FFE476 02700D                          beq             notTimerIRQ
1124
 00FFE478 01507FFFFE60012                 clr             VIA+VIA_T3LL
1125
 00FFE47D 01507FFFFE60013                 clr             VIA+VIA_T3LH
1126
 00FFE482 07CE00037                       inc             $E00037                                 ; update timer IRQ screen flag
1127 13 robfinch
                              notTimerIRQ:
1128 14 robfinch
 00FFE485 039                             rts
1129 13 robfinch
 
1130
 
1131
 
1132
                              ; ============================================================================
1133
                              ;        __
1134
                              ;   \\__/ o\    (C) 2013-2022  Robert Finch, Waterloo
1135
                              ;    \  __ /    All rights reserved.
1136
                              ;     \/_//     robfinch@opencores.org
1137
                              ;       ||
1138
                              ;
1139
                              ;
1140
                              ; BSD 3-Clause License
1141
                              ; Redistribution and use in source and binary forms, with or without
1142
                              ; modification, are permitted provided that the following conditions are met:
1143
                              ;
1144
                              ; 1. Redistributions of source code must retain the above copyright notice, this
1145
                              ;    list of conditions and the following disclaimer.
1146
                              ;
1147
                              ; 2. Redistributions in binary form must reproduce the above copyright notice,
1148
                              ;    this list of conditions and the following disclaimer in the documentation
1149
                              ;    and/or other materials provided with the distribution.
1150
                              ;
1151
                              ; 3. Neither the name of the copyright holder nor the names of its
1152
                              ;    contributors may be used to endorse or promote products derived from
1153
                              ;    this software without specific prior written permission.
1154
                              ;
1155
                              ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1156
                              ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1157
                              ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1158
                              ; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
1159
                              ; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1160
                              ; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
1161
                              ; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
1162
                              ; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
1163
                              ; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1164
                              ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1165
                              ;
1166
                              ; ============================================================================
1167
                              ;
1168
                              ;===============================================================================
1169
                              ; Generic I2C routines
1170
                              ;
1171
                              ; It is assumed there may be more than one I2C controller in the system, so
1172
                              ; the address of the controller is passed in the X register.
1173
                              ;===============================================================================
1174
 
1175
                              I2C_PREL        EQU             $0
1176
                              I2C_PREH        EQU             $1
1177
                              I2C_CTRL        EQU             $2
1178
                              I2C_RXR         EQU             $3
1179
                              I2C_TXR         EQU             $3
1180
                              I2C_CMD         EQU             $4
1181
                              I2C_STAT        EQU             $4
1182
 
1183
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1184
                              ; i2c initialization, sets the clock prescaler
1185
                              ;
1186
                              ; Parameters:
1187
                              ;               x = I2C controller address
1188
                              ; Returns: none
1189
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1190
 
1191
                              _i2c_init:
1192 14 robfinch
 00FFE486 034004                          pshs    b
1193
 00FFE488 0C6004                          ldb             #4                                                                      ; setup prescale for 400kHz clock
1194
 00FFE48A 0E7804                          stb             I2C_PREL,x
1195
 00FFE48C 06F001                          clr             I2C_PREH,x
1196
 00FFE48E 035084                          puls    b,pc
1197 13 robfinch
 
1198
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1199
                              ; Wait for I2C transfer to complete
1200
                              ;
1201
                              ; Parameters
1202
                              ;       x - I2C controller base address
1203
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1204
 
1205
                              i2c_wait_tip:
1206 14 robfinch
 00FFE490 034004                          pshs            b
1207 13 robfinch
                              i2cw1:
1208 14 robfinch
 00FFE492 0E6004                          ldb                     I2C_STAT,x              ; would use lvb, but lb is okay since its the I/O area
1209
 00FFE494 0C5001                          bitb            #1                                              ; wait for tip to clear
1210
 00FFE496 026FFA                          bne                     i2cw1
1211
 00FFE498 035084                          puls            b,pc
1212 13 robfinch
 
1213
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1214
                              ; Write command to i2c
1215
                              ;
1216
                              ; Parameters
1217
                              ;               accb - data to transmit
1218
                              ;               acca - command value
1219
                              ;               x       - I2C controller base address
1220
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1221
 
1222
                              i2c_wr_cmd:
1223 14 robfinch
 00FFE49A 0E7003                          stb             I2C_TXR,x
1224
 00FFE49C 0A7004                          sta             I2C_CMD,x
1225
 00FFE49E 08DFF0                          bsr             i2c_wait_tip
1226
 00FFE4A0 0E6004                          ldb             I2C_STAT,x
1227
 00FFE4A2 039                             rts
1228 13 robfinch
 
1229
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1230
                              ; Parameters
1231
                              ;               x - I2C controller base address
1232
                              ;               accb - data to send
1233
                              ; Returns: none
1234
                              ; Stack space: 2 words
1235
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1236
 
1237
                              _i2c_xmit1:
1238 14 robfinch
 00FFE4A3 034006                          pshs    d                                                               ; save data value
1239
 00FFE4A5 034006                          pshs    d                                                               ; and save it again
1240
 00FFE4A7 0C6001                          ldb             #1
1241
 00FFE4A9 0E7002                          stb             I2C_CTRL,x                      ; enable the core
1242
 00FFE4AB 0C6076                          ldb             #$76                                            ; set slave address = %0111011
1243
 00FFE4AD 086090                          lda             #$90                                            ; set STA, WR
1244
 00FFE4AF 08DFE9                          bsr             i2c_wr_cmd
1245
 00FFE4B1 08D00A                          bsr             i2c_wait_rx_nack
1246
 00FFE4B3 035006                          puls    d                                                               ; get back data value
1247
 00FFE4B5 086050                          lda             #$50                                            ; set STO, WR
1248
 00FFE4B7 08DFE1                          bsr             i2c_wr_cmd
1249
 00FFE4B9 08D002                          bsr             i2c_wait_rx_nack
1250
 00FFE4BB 035086                          puls    d,pc
1251 13 robfinch
 
1252
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1253
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1254
 
1255
                              i2c_wait_rx_nack:
1256 14 robfinch
 00FFE4BD 034004                          pshs    b                                                               ; save off accb
1257 13 robfinch
                              i2cwr1:
1258 14 robfinch
 00FFE4BF 0E6004                          ldb             I2C_STAT,x                      ; wait for RXack = 0
1259
 00FFE4C1 0C5080                          bitb    #$80                                            ; test for nack
1260
 00FFE4C3 026FFA                          bne             i2cwr1
1261
 00FFE4C5 035084                          puls    b,pc
1262 13 robfinch
 
1263
                              ; ============================================================================
1264
                              ;        __
1265
                              ;   \\__/ o\    (C) 2022  Robert Finch, Waterloo
1266
                              ;    \  __ /    All rights reserved.
1267
                              ;     \/_//     robfinch@opencores.org
1268
                              ;       ||
1269
                              ;
1270
                              ;
1271
                              ; BSD 3-Clause License
1272
                              ; Redistribution and use in source and binary forms, with or without
1273
                              ; modification, are permitted provided that the following conditions are met:
1274
                              ;
1275
                              ; 1. Redistributions of source code must retain the above copyright notice, this
1276
                              ;    list of conditions and the following disclaimer.
1277
                              ;
1278
                              ; 2. Redistributions in binary form must reproduce the above copyright notice,
1279
                              ;    this list of conditions and the following disclaimer in the documentation
1280
                              ;    and/or other materials provided with the distribution.
1281
                              ;
1282
                              ; 3. Neither the name of the copyright holder nor the names of its
1283
                              ;    contributors may be used to endorse or promote products derived from
1284
                              ;    this software without specific prior written permission.
1285
                              ;
1286
                              ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1287
                              ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1288
                              ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1289
                              ; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
1290
                              ; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1291
                              ; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
1292
                              ; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
1293
                              ; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
1294
                              ; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1295
                              ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1296
                              ;
1297
                              ; ============================================================================
1298
 
1299
                              ;===============================================================================
1300
                              ; Realtime clock routines
1301
                              ;===============================================================================
1302
 
1303
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1304
                              ; Read the real-time-clock chip.
1305
                              ;
1306
                              ; The entire contents of the clock registers and sram are read into a buffer
1307
                              ; in one-shot rather than reading the registers individually.
1308
                              ;
1309
                              ; Parameters: none
1310
                              ; Returns: d = 0 on success, otherwise non-zero
1311
                              ; Modifies: d and RTCBuf
1312
                              ; Stack space: 6 words
1313
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1314
 
1315
                              rtc_read:
1316 14 robfinch
 00FFE4C7 08EE30500                       ldx                     #RTC
1317
 00FFE4CA 18E007FC0                       ldy                     #RTCBuf
1318
 00FFE4CD 0C6080                          ldb                     #$80
1319
 00FFE4CF 0E7002                          stb                     I2C_CTRL,x              ; enable I2C
1320
 00FFE4D1 0CC0900DE                       ldd                     #$900DE                         ; read address, write op, STA + wr bit
1321
 00FFE4D4 08DFC4                          bsr                     i2c_wr_cmd
1322
 00FFE4D6 0C5080                          bitb            #$80
1323
 00FFE4D8 02603C                          bne                     rtc_rxerr
1324
 00FFE4DA 0CC010000                       ldd                     #$10000                         ; address zero, wr bit
1325
 00FFE4DD 08DFBB                          bsr                     i2c_wr_cmd
1326
 00FFE4DF 0C5080                          bitb            #$80
1327
 00FFE4E1 026033                          bne                     rtc_rxerr
1328
 00FFE4E3 0CC0900DF                       ldd                     #$900DF                         ; read address, read op, STA + wr bit
1329
 00FFE4E6 08DFB2                          bsr                     i2c_wr_cmd
1330
 00FFE4E8 0C5080                          bitb            #$80
1331
 00FFE4EA 02602A                          bne                     rtc_rxerr
1332 13 robfinch
 
1333 14 robfinch
 00FFE4EC 05F                             clrb
1334 13 robfinch
                              rtcr0001:
1335 14 robfinch
 00FFE4ED 086020                          lda                     #$20
1336
 00FFE4EF 0A7004                          sta                     I2C_CMD,x                       ; rd bit
1337
 00FFE4F1 08DF9D                          bsr                     i2c_wait_tip
1338
 00FFE4F3 08DFC8                          bsr                     i2c_wait_rx_nack
1339
 00FFE4F5 0A6004                          lda                     I2C_STAT,x
1340
 00FFE4F7 085080                          bita            #$80
1341
 00FFE4F9 02601B                          bne                     rtc_rxerr
1342
 00FFE4FB 0A6003                          lda                     I2C_RXR,x
1343
 00FFE4FD 0A7A07                          sta                     b,y
1344
 00FFE4FF 05C                             incb
1345
 00FFE500 0C105F                          cmpb            #$5F
1346
 00FFE502 025FE9                          blo                     rtcr0001
1347
 00FFE504 086068                          lda                     #$68
1348
 00FFE506 0A7004                          sta                     I2C_CMD,x                       ; STO, rd bit + nack
1349
 00FFE508 08DF86                          bsr                     i2c_wait_tip
1350
 00FFE50A 0A6004                          lda                     I2C_STAT,x
1351
 00FFE50C 085080                          bita            #$80
1352
 00FFE50E 026006                          bne                     rtc_rxerr
1353
 00FFE510 0A6003                          lda                     I2C_RXR,x
1354
 00FFE512 0A7A07                          sta                     b,y
1355
 00FFE514 04F05F                          clrd                                                                    ; return 0
1356 13 robfinch
                              rtc_rxerr:
1357 14 robfinch
 00FFE516 06F002                          clr                     I2C_CTRL,x      ; disable I2C and return status
1358
 00FFE518 04F                             clra
1359
 00FFE519 039                             rts
1360 13 robfinch
 
1361
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1362
                              ; Write the real-time-clock chip.
1363
                              ;
1364
                              ; The entire contents of the clock registers and sram are written from a
1365
                              ; buffer (RTCBuf) in one-shot rather than writing the registers individually.
1366
                              ;
1367
                              ; Parameters: none
1368
                              ; Returns: r1 = 0 on success, otherwise non-zero
1369
                              ; Modifies: r1 and RTCBuf
1370
                              ; Stack space: 6 words
1371
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1372
 
1373
                              rtc_write:
1374 14 robfinch
 00FFE51A 08EE30500                       ldx             #RTC
1375
 00FFE51D 18E007FC0                       ldy             #RTCBuf
1376 13 robfinch
 
1377 14 robfinch
 00FFE520 0C6080                          ldb             #$80
1378
 00FFE522 0E7002                          stb             I2C_CTRL,x              ; enable I2C
1379
 00FFE524 0CC0900DE                       ldd             #$900DE                         ; read address, write op, STA + wr bit
1380
 00FFE527 08DF71                          bsr             i2c_wr_cmd
1381
 00FFE529 0C5080                          bitb    #$80
1382
 00FFE52B 026FE9                          bne             rtc_rxerr
1383
 00FFE52D 0CC010000                       ldd             #$10000                         ; address zero, wr bit
1384
 00FFE530 08DF68                          bsr             i2c_wr_cmd
1385
 00FFE532 0C5080                          bitb    #$80
1386
 00FFE534 026FE0                          bne             rtc_rxerr
1387 13 robfinch
 
1388 14 robfinch
 00FFE536 0C6000                          ldb             #0
1389 13 robfinch
                              rtcw0001:
1390 14 robfinch
 00FFE538 034004                          pshs    b
1391
 00FFE53A 0E6A05                          ldb             b,y
1392
 00FFE53C 086010                          lda             #$10
1393
 00FFE53E 08DF5A                          bsr             i2c_wr_cmd
1394
 00FFE540 0C5080                          bitb    #$80
1395
 00FFE542 035004                          puls    b
1396
 00FFE544 026FD0                          bne             rtc_rxerr
1397
 00FFE546 05C                             incb
1398
 00FFE547 0C105F                          cmpb    #$5F
1399
 00FFE549 025FED                          blo             rtcw0001
1400
 00FFE54B 0E6A05                          ldb             b,y
1401
 00FFE54D 086050                          lda             #$50                                    ; STO, wr bit
1402
 00FFE54F 08DF49                          bsr             i2c_wr_cmd
1403
 00FFE551 0C5080                          bitb    #$80
1404
 00FFE553 026FC1                          bne             rtc_rxerr
1405
 00FFE555 04F05F                          clrd                                                            ; return 0
1406
 00FFE557 06F002                          clr             I2C_CTRL,x              ; disable I2C and return status
1407
 00FFE559 039                             rts
1408 13 robfinch
 
1409
                              ;==============================================================================
1410 4 robfinch
                              ; Keyboard I/O
1411
                              ;==============================================================================
1412
 
1413
                                      ;--------------------------------------------------------------------------
1414
                                      ; PS2 scan codes to ascii conversion tables.
1415
                                      ;--------------------------------------------------------------------------
1416
                                      ;
1417
                                      org     (* + 127) & $FFFFFF80
1418
 
1419
                              unshiftedScanCodes:
1420 13 robfinch
 00FFE580 02E0A902E0A50A30A10A2           fcb     $2e,$a9,$2e,$a5,$a3,$a1,$a2,$ac
1421
 00FFE587 0AC
1422
 00FFE588 02E0AA0A80A60A4009060           fcb     $2e,$aa,$a8,$a6,$a4,$09,$60,$2e
1423
 00FFE58F 02E
1424
 00FFE590 02E02E02E02E02E071031           fcb     $2e,$2e,$2e,$2e,$2e,$71,$31,$2e
1425
 00FFE597 02E
1426
 00FFE598 02E02E07A073061077032           fcb     $2e,$2e,$7a,$73,$61,$77,$32,$2e
1427
 00FFE59F 02E
1428
 00FFE5A0 02E063078064065034033           fcb     $2e,$63,$78,$64,$65,$34,$33,$2e
1429
 00FFE5A7 02E
1430
 00FFE5A8 02E020076066074072035           fcb     $2e,$20,$76,$66,$74,$72,$35,$2e
1431
 00FFE5AF 02E
1432
 00FFE5B0 02E06E062068067079036           fcb     $2e,$6e,$62,$68,$67,$79,$36,$2e
1433
 00FFE5B7 02E
1434
 00FFE5B8 02E02E06D06A075037038           fcb     $2e,$2e,$6d,$6a,$75,$37,$38,$2e
1435
 00FFE5BF 02E
1436
 00FFE5C0 02E02C06B06906F030039           fcb     $2e,$2c,$6b,$69,$6f,$30,$39,$2e
1437
 00FFE5C7 02E
1438
 00FFE5C8 02E02E02F06C03B07002D           fcb     $2e,$2e,$2f,$6c,$3b,$70,$2d,$2e
1439
 00FFE5CF 02E
1440
 00FFE5D0 02E02E02702E05B03D02E           fcb     $2e,$2e,$27,$2e,$5b,$3d,$2e,$2e
1441
 00FFE5D7 02E
1442
 00FFE5D8 0AD02E00D05D02E05C02E           fcb     $ad,$2e,$0d,$5d,$2e,$5c,$2e,$2e
1443
 00FFE5DF 02E
1444
 00FFE5E0 02E02E02E02E02E02E008           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e
1445
 00FFE5E7 02E
1446
 00FFE5E8 02E09502E09309402E02E           fcb     $2e,$95,$2e,$93,$94,$2e,$2e,$2e
1447
 00FFE5EF 02E
1448
 00FFE5F0 09807F09202E09109001B           fcb     $98,$7f,$92,$2e,$91,$90,$1b,$af
1449
 00FFE5F7 0AF
1450
 00FFE5F8 0AB02E09702E02E0960AE           fcb     $ab,$2e,$97,$2e,$2e,$96,$ae,$2e
1451
 00FFE5FF 02E
1452 4 robfinch
 
1453 13 robfinch
 00FFE600 02E02E02E0A702E02E02E           fcb     $2e,$2e,$2e,$a7,$2e,$2e,$2e,$2e
1454
 00FFE607 02E
1455
 00FFE608 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1456
 00FFE60F 02E
1457
 00FFE610 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1458
 00FFE617 02E
1459
 00FFE618 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1460
 00FFE61F 02E
1461
 00FFE620 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1462
 00FFE627 02E
1463
 00FFE628 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1464
 00FFE62F 02E
1465
 00FFE630 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1466
 00FFE637 02E
1467
 00FFE638 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1468
 00FFE63F 02E
1469
 00FFE640 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1470
 00FFE647 02E
1471
 00FFE648 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1472
 00FFE64F 02E
1473
 00FFE650 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1474
 00FFE657 02E
1475
 00FFE658 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1476
 00FFE65F 02E
1477
 00FFE660 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1478
 00FFE667 02E
1479
 00FFE668 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1480
 00FFE66F 02E
1481
 00FFE670 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1482
 00FFE677 02E
1483
 00FFE678 02E02E0FA02E02E02E02E           fcb     $2e,$2e,$fa,$2e,$2e,$2e,$2e,$2e
1484
 00FFE67F 02E
1485 4 robfinch
 
1486
                              shiftedScanCodes:
1487 13 robfinch
 00FFE680 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1488
 00FFE687 02E
1489
 00FFE688 02E02E02E02E02E00907E           fcb     $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e
1490
 00FFE68F 02E
1491
 00FFE690 02E02E02E02E02E051021           fcb     $2e,$2e,$2e,$2e,$2e,$51,$21,$2e
1492
 00FFE697 02E
1493
 00FFE698 02E02E05A053041057040           fcb     $2e,$2e,$5a,$53,$41,$57,$40,$2e
1494
 00FFE69F 02E
1495
 00FFE6A0 02E043058044045024023           fcb     $2e,$43,$58,$44,$45,$24,$23,$2e
1496
 00FFE6A7 02E
1497
 00FFE6A8 02E020056046054052025           fcb     $2e,$20,$56,$46,$54,$52,$25,$2e
1498
 00FFE6AF 02E
1499
 00FFE6B0 02E04E04204804705905E           fcb     $2e,$4e,$42,$48,$47,$59,$5e,$2e
1500
 00FFE6B7 02E
1501
 00FFE6B8 02E02E04D04A05502602A           fcb     $2e,$2e,$4d,$4a,$55,$26,$2a,$2e
1502
 00FFE6BF 02E
1503
 00FFE6C0 02E03C04B04904F029028           fcb     $2e,$3c,$4b,$49,$4f,$29,$28,$2e
1504
 00FFE6C7 02E
1505
 00FFE6C8 02E03E03F04C03A05005F           fcb     $2e,$3e,$3f,$4c,$3a,$50,$5f,$2e
1506
 00FFE6CF 02E
1507
 00FFE6D0 02E02E02202E07B02B02E           fcb     $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e
1508
 00FFE6D7 02E
1509
 00FFE6D8 02E02E00D07D02E07C02E           fcb     $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e
1510
 00FFE6DF 02E
1511
 00FFE6E0 02E02E02E02E02E02E008           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e
1512
 00FFE6E7 02E
1513
 00FFE6E8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1514
 00FFE6EF 02E
1515
 00FFE6F0 02E07F02E02E02E02E01B           fcb     $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e
1516
 00FFE6F7 02E
1517
 00FFE6F8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1518
 00FFE6FF 02E
1519 4 robfinch
 
1520 13 robfinch
 00FFE700 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1521
 00FFE707 02E
1522
 00FFE708 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1523
 00FFE70F 02E
1524
 00FFE710 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1525
 00FFE717 02E
1526
 00FFE718 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1527
 00FFE71F 02E
1528
 00FFE720 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1529
 00FFE727 02E
1530
 00FFE728 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1531
 00FFE72F 02E
1532
 00FFE730 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1533
 00FFE737 02E
1534
 00FFE738 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1535
 00FFE73F 02E
1536
 00FFE740 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1537
 00FFE747 02E
1538
 00FFE748 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1539
 00FFE74F 02E
1540
 00FFE750 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1541
 00FFE757 02E
1542
 00FFE758 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1543
 00FFE75F 02E
1544
 00FFE760 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1545
 00FFE767 02E
1546
 00FFE768 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1547
 00FFE76F 02E
1548
 00FFE770 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1549
 00FFE777 02E
1550
 00FFE778 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1551
 00FFE77F 02E
1552 4 robfinch
 
1553
                              ; control
1554
                              keybdControlCodes:
1555 13 robfinch
 00FFE780 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1556
 00FFE787 02E
1557
 00FFE788 02E02E02E02E02E00907E           fcb     $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e
1558
 00FFE78F 02E
1559
 00FFE790 02E02E02E02E02E011021           fcb     $2e,$2e,$2e,$2e,$2e,$11,$21,$2e
1560
 00FFE797 02E
1561
 00FFE798 02E02E01A013001017040           fcb     $2e,$2e,$1a,$13,$01,$17,$40,$2e
1562
 00FFE79F 02E
1563
 00FFE7A0 02E003018004005024023           fcb     $2e,$03,$18,$04,$05,$24,$23,$2e
1564
 00FFE7A7 02E
1565
 00FFE7A8 02E020016006014012025           fcb     $2e,$20,$16,$06,$14,$12,$25,$2e
1566
 00FFE7AF 02E
1567
 00FFE7B0 02E00E00200800701905E           fcb     $2e,$0e,$02,$08,$07,$19,$5e,$2e
1568
 00FFE7B7 02E
1569
 00FFE7B8 02E02E00D00A01502602A           fcb     $2e,$2e,$0d,$0a,$15,$26,$2a,$2e
1570
 00FFE7BF 02E
1571
 00FFE7C0 02E03C00B00900F029028           fcb     $2e,$3c,$0b,$09,$0f,$29,$28,$2e
1572
 00FFE7C7 02E
1573
 00FFE7C8 02E03E03F00C03A01005F           fcb     $2e,$3e,$3f,$0c,$3a,$10,$5f,$2e
1574
 00FFE7CF 02E
1575
 00FFE7D0 02E02E02202E07B02B02E           fcb     $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e
1576
 00FFE7D7 02E
1577
 00FFE7D8 02E02E00D07D02E07C02E           fcb     $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e
1578
 00FFE7DF 02E
1579
 00FFE7E0 02E02E02E02E02E02E008           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e
1580
 00FFE7E7 02E
1581
 00FFE7E8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1582
 00FFE7EF 02E
1583
 00FFE7F0 02E07F02E02E02E02E01B           fcb     $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e
1584
 00FFE7F7 02E
1585
 00FFE7F8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1586
 00FFE7FF 02E
1587 4 robfinch
 
1588
                              keybdExtendedCodes:
1589 13 robfinch
 00FFE800 02E02E02E02E0A30A10A2           fcb     $2e,$2e,$2e,$2e,$a3,$a1,$a2,$2e
1590
 00FFE807 02E
1591
 00FFE808 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1592
 00FFE80F 02E
1593
 00FFE810 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1594
 00FFE817 02E
1595
 00FFE818 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1596
 00FFE81F 02E
1597
 00FFE820 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1598
 00FFE827 02E
1599
 00FFE828 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1600
 00FFE82F 02E
1601
 00FFE830 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1602
 00FFE837 02E
1603
 00FFE838 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1604
 00FFE83F 02E
1605
 00FFE840 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1606
 00FFE847 02E
1607
 00FFE848 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1608
 00FFE84F 02E
1609
 00FFE850 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1610
 00FFE857 02E
1611
 00FFE858 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1612
 00FFE85F 02E
1613
 00FFE860 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1614
 00FFE867 02E
1615
 00FFE868 02E09502E09309402E02E           fcb     $2e,$95,$2e,$93,$94,$2e,$2e,$2e
1616
 00FFE86F 02E
1617
 00FFE870 09809909202E09109002E           fcb     $98,$99,$92,$2e,$91,$90,$2e,$2e
1618
 00FFE877 02E
1619
 00FFE878 02E02E09702E02E09602E           fcb     $2e,$2e,$97,$2e,$2e,$96,$2e,$2e
1620
 00FFE87F 02E
1621 4 robfinch
 
1622
                              ; ============================================================================
1623
                              ;        __
1624
                              ;   \\__/ o\    (C) 2013-2022  Robert Finch, Waterloo
1625
                              ;    \  __ /    All rights reserved.
1626
                              ;     \/_//     robfinch@opencores.org
1627
                              ;       ||
1628
                              ;
1629
                              ;
1630
                              ;       Keyboard driver routines to interface to a PS2 style keyboard
1631
                              ; Converts the scancode to ascii
1632
                              ;
1633
                              ; This source file is free software: you can redistribute it and/or modify
1634
                              ; it under the terms of the GNU Lesser General Public License as published
1635
                              ; by the Free Software Foundation, either version 3 of the License, or
1636
                              ; (at your option) any later version.
1637
                              ;
1638
                              ; This source file is distributed in the hope that it will be useful,
1639
                              ; but WITHOUT ANY WARRANTY; without even the implied warranty of
1640
                              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1641
                              ; GNU General Public License for more details.
1642
                              ;
1643
                              ; You should have received a copy of the GNU General Public License
1644
                              ; along with this program.  If not, see .
1645
                              ;
1646
                              ; ============================================================================
1647
                              ;
1648
                              SC_F12  EQU     $07
1649
                              SC_C    EQU             $21
1650
                              SC_T    EQU         $2C
1651
                              SC_Z            EQU     $1A
1652
                              SC_DEL  EQU                     $71     ; extend
1653
                              SC_KEYUP        EQU             $F0     ; should be $f0
1654
                              SC_EXTEND EQU     $E0
1655
                              SC_CTRL EQU                     $14
1656
                              SC_RSHIFT               EQU     $59
1657
                              SC_NUMLOCK      EQU     $77
1658
                              SC_SCROLLLOCK           EQU     $7E
1659
                              SC_CAPSLOCK             EQU             $58
1660
                              SC_ALT  EQU                     $11
1661
 
1662
                              ;#define SC_LSHIFT      EQU             $12
1663
                              ;SC_DEL         EQU             $71             ; extend
1664
                              ;SC_LCTRL       EQU             $58
1665
 
1666
                              SC_TAB  EQU     $0D
1667
 
1668
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1669
                              ; Recieve a byte from the keyboard, used after a command is sent to the
1670
                              ; keyboard in order to wait for a response.
1671
                              ;
1672
                              ; Parameters: none
1673
                              ; Returns: accd = recieved byte ($00 to $FF), -1 on timeout
1674
                              ; Modifies: acc
1675
                              ; Stack Space: 2 words
1676
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1677
 
1678
                              KeybdRecvByte:
1679 13 robfinch
 00FFE880 034010                          pshs    x
1680
 00FFE882 08E000064                       ldx             #100                                            ; wait up to 1s
1681 4 robfinch
                              krb3:
1682 13 robfinch
 00FFE885 08D05A                          bsr             KeybdGetStatus  ; wait for response from keyboard
1683
 00FFE887 05D                             tstb
1684
 00FFE888 02B00B                          bmi             krb4                                            ; is input buffer full ? yes, branch
1685
 00FFE88A 08D02D                          bsr             Wait10ms                                ; wait a bit
1686
 00FFE88C 0301FF                          dex
1687
 00FFE88E 026FF5                          bne             krb3                                            ; go back and try again
1688
 00FFE890 0CCFFFFFF                       ldd             #-1                                                     ; return -1
1689
 00FFE893 035090                          puls    x,pc
1690 4 robfinch
                              krb4:
1691 13 robfinch
 00FFE895 08D066                          bsr             KeybdGetScancode
1692
 00FFE897 035090                          puls    x,pc
1693 4 robfinch
 
1694
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1695
                              ; Send a byte to the keyboard.
1696
                              ;
1697
                              ; Parameters: accb byte to send
1698
                              ; Returns: none
1699
                              ; Modifies: none
1700
                              ; Stack Space: 0 words
1701
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1702
 
1703
                              KeybdSendByte:
1704 13 robfinch
 00FFE899 0150F7FFFE30400                 stb             KEYBD
1705
 00FFE89E 039                             rts
1706 4 robfinch
 
1707
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1708
                              ; Wait until the keyboard transmit is complete
1709
                              ;
1710
                              ; Parameters: none
1711
                              ; Returns: r1 = 0 if successful, r1 = -1 timeout
1712
                              ; Modifies: r1
1713
                              ; Stack Space: 3 words
1714
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1715
 
1716
                              KeybdWaitTx:
1717 13 robfinch
 00FFE89F 034010                          pshs    x
1718
 00FFE8A1 08E000064                       ldx             #100                            ; wait a max of 1s
1719 4 robfinch
                              kwt1:
1720 13 robfinch
 00FFE8A4 08D03B                          bsr             KeybdGetStatus
1721
 00FFE8A6 0C4040                          andb    #$40                            ; check for transmit complete bit; branch if bit set
1722
 00FFE8A8 02600B                          bne             kwt2
1723
 00FFE8AA 08D00D                          bsr             Wait10ms                ; delay a little bit
1724
 00FFE8AC 0301FF                          dex
1725
 00FFE8AE 026FF4                          bne             kwt1                            ; go back and try again
1726
 00FFE8B0 0CCFFFFFF                       ldd             #-1                                     ; timed out, return -1
1727
 00FFE8B3 035090                          puls    x,pc
1728 4 robfinch
                              kwt2:
1729 13 robfinch
 00FFE8B5 04F                             clra                                                    ; wait complete, return 0
1730
 00FFE8B6 05F                             clrb
1731
 00FFE8B7 035090                          puls    x,pc
1732 4 robfinch
 
1733
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1734
                              ; Wait for 10 ms
1735
                              ;
1736
                              ; Parameters: none
1737
                              ; Returns: none
1738
                              ; Modifies: none
1739
                              ; Stack Space: 2 words
1740
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1741
 
1742
                              Wait10ms:
1743 13 robfinch
 00FFE8B9 034006                          pshs    d
1744
 00FFE8BB 0150B6FFFFFFFE7                 lda             MSCOUNT+3
1745 4 robfinch
                              W10_0001:
1746 13 robfinch
 00FFE8C0 01F089                          tfr             a,b
1747
 00FFE8C2 0150F0FFFFFFFE7                 subb    MSCOUNT+3
1748
 00FFE8C7 0C1FFA                          cmpb    #$FFA
1749
 00FFE8C9 022FF5                          bhi             W10_0001
1750
 00FFE8CB 035086                          puls    d,pc
1751 4 robfinch
 
1752
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1753
                              ; Wait for 300 ms (256 ms)
1754
                              ;
1755
                              ; Parameters: none
1756
                              ; Returns: none
1757
                              ; Modifies: none
1758
                              ; Stack Space: 2 words
1759
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1760
 
1761
                              Wait300ms:
1762 13 robfinch
 00FFE8CD 034006                          pshs    d
1763
 00FFE8CF 0150B6FFFFFFFE7                 lda             MSCOUNT+3
1764 4 robfinch
                              W300_0001:
1765 13 robfinch
 00FFE8D4 01F089                          tfr             a,b
1766
 00FFE8D6 0150F0FFFFFFFE7                 subb    MSCOUNT+3
1767
 00FFE8DB 0C1F00                          cmpb    #$F00
1768
 00FFE8DD 022FF5                          bhi     W300_0001
1769
 00FFE8DF 035086                          puls    d,pc
1770 4 robfinch
 
1771
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1772
                              ; Get the keyboard status
1773
                              ;
1774
                              ; Parameters: none
1775
                              ; Returns: d = status
1776
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1777
 
1778
                              KeybdGetStatus:
1779
                              kbgs3:
1780 13 robfinch
 00FFE8E1 0150F6FFFE30401                 ldb             KEYBD+1
1781
 00FFE8E6 0C5080                          bitb    #$80
1782
 00FFE8E8 02600E                          bne             kbgs1
1783
 00FFE8EA 0C5001                          bitb    #$01            ; check parity error flag
1784
 00FFE8EC 026002                          bne             kbgs2
1785
 00FFE8EE 04F                             clra
1786
 00FFE8EF 039                             rts
1787 4 robfinch
                              kbgs2:
1788 13 robfinch
 00FFE8F0 0C60FE                          ldb             #$FE            ; request resend
1789
 00FFE8F2 08DFA5                          bsr             KeybdSendByte
1790
 00FFE8F4 08DFA9                          bsr             KeybdWaitTx
1791
 00FFE8F6 020FE9                          bra             kbgs3
1792 4 robfinch
                              kbgs1:                                  ; return negative status
1793 13 robfinch
 00FFE8F8 0CAF00                          orb             #$F00
1794
 00FFE8FA 086FFF                          lda             #-1
1795
 00FFE8FC 039                             rts
1796 4 robfinch
 
1797
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1798
                              ; Get the scancode from the keyboard port
1799
                              ;
1800
                              ; Parameters: none
1801
                              ; Returns: acca = scancode
1802
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1803
 
1804
                              KeybdGetScancode:
1805 13 robfinch
 00FFE8FD 04F                             clra
1806
 00FFE8FE 0150F6FFFE30400                 ldb             KEYBD                           ; get the scan code
1807
 00FFE903 01507FFFFE30401                 clr             KEYBD+1                 ; clear receive register (write $00 to status reg)
1808
 00FFE908 039                             rts
1809 4 robfinch
 
1810
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1811
                              ; Set the LEDs on the keyboard.
1812
                              ;
1813
                              ; Parameters: d LED status to set
1814
                              ; Returns: none
1815
                              ; Modifies: none
1816
                              ; Stack Space: 2 words
1817
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1818
 
1819
                              KeybdSetLED:
1820 13 robfinch
 00FFE909 034004                          pshs    b
1821
 00FFE90B 0C60ED                          ldb             #$ED                                            ; set LEDs command
1822
 00FFE90D 08DF8A                          bsr             KeybdSendByte
1823
 00FFE90F 08DF8E                          bsr             KeybdWaitTx
1824
 00FFE911 08DF6D                          bsr             KeybdRecvByte   ; should be an ack
1825
 00FFE913 035004                          puls    b
1826
 00FFE915 08DF82                          bsr             KeybdSendByte
1827
 00FFE917 08DF86                          bsr             KeybdWaitTx
1828
 00FFE919 08DF65                          bsr             KeybdRecvByte   ; should be an ack
1829
 00FFE91B 039                             rts
1830 4 robfinch
 
1831
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1832
                              ; Get ID - get the keyboards identifier code.
1833
                              ;
1834
                              ; Parameters: none
1835
                              ; Returns: d = $AB83, $00 on fail
1836
                              ; Modifies: d, KeybdID updated
1837
                              ; Stack Space: 2 words
1838
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1839
 
1840
                              KeybdGetID:
1841 13 robfinch
 00FFE91C 0C60F2                          ldb             #$F2
1842
 00FFE91E 08DF79                          bsr             KeybdSendByte
1843
 00FFE920 08DF7D                          bsr             KeybdWaitTx
1844
 00FFE922 08DF5C                          bsr             KeybdRecvByte
1845
 00FFE924 0C5080                          bitb    #$80
1846
 00FFE926 026014                          bne             kgnotKbd
1847
 00FFE928 0C10AB                          cmpb    #$AB
1848
 00FFE92A 026010                          bne             kgnotKbd
1849
 00FFE92C 08DF52                          bsr             KeybdRecvByte
1850
 00FFE92E 0C5080                          bitb    #$80
1851
 00FFE930 02600A                          bne             kgnotKbd
1852
 00FFE932 0C1083                          cmpb    #$83
1853
 00FFE934 026006                          bne             kgnotKbd
1854
 00FFE936 0CC00AB83                       ldd             #$AB83
1855 4 robfinch
                              kgid1:
1856 13 robfinch
 00FFE939 0DD124                          std             KeybdID
1857
 00FFE93B 039                             rts
1858 4 robfinch
                              kgnotKbd:
1859 13 robfinch
 00FFE93C 04F                             clra
1860
 00FFE93D 05F                             clrb
1861
 00FFE93E 020FF9                          bra             kgid1
1862 4 robfinch
 
1863
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1864
                              ; Initialize the keyboard.
1865
                              ;
1866
                              ; Parameters:
1867
                              ;               none
1868
                              ;       Modifies:
1869
                              ;               none
1870
                              ; Returns:
1871
                              ;               none
1872
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1873
 
1874
                              KeybdInit:
1875 13 robfinch
 00FFE940 034026                          pshs    d,y
1876
 00FFE942 18E000005                       ldy             #5
1877
 00FFE945 00F120                          clr             KeyState1               ; records key up/down state
1878
 00FFE947 00F121                          clr             KeyState2               ; records shift,ctrl,alt state
1879 4 robfinch
                              kbdi0002:
1880 13 robfinch
 00FFE949 08DF6E                          bsr             Wait10ms
1881
 00FFE94B 01507FFFFE30401                 clr             KEYBD+1                 ; clear receive register (write $00 to status reg)
1882
 00FFE950 0C6FFF                          ldb             #-1                                     ; send reset code to keyboard
1883
 00FFE952 0150F7FFFE30401                 stb             KEYBD+1                 ; write $FF to status reg to clear TX state
1884
 00FFE957 08DF40                          bsr             KeybdSendByte   ; now write to transmit register
1885
 00FFE959 08DF44                          bsr             KeybdWaitTx             ; wait until no longer busy
1886
 00FFE95B 08DF23                          bsr             KeybdRecvByte   ; look for an ACK ($FA)
1887
 00FFE95D 0C10FA                          cmpb    #$FA
1888
 00FFE95F 026021                          bne             kbdiTryAgain
1889
 00FFE961 08DF1D                          bsr             KeybdRecvByte   ; look for BAT completion code ($AA)
1890
 00FFE963 0C10FC                          cmpb    #$FC                            ; reset error ?
1891
 00FFE965 02701B                          beq             kbdiTryAgain
1892
 00FFE967 0C10AA                          cmpb    #$AA                            ; reset complete okay ?
1893
 00FFE969 026017                          bne             kbdiTryAgain
1894 4 robfinch
 
1895
                                      ; After a reset, scan code set #2 should be active
1896
                              .config:
1897 13 robfinch
 00FFE96B 0C60F0                          ldb             #$F0                    ; send scan code select
1898
 00FFE96D 0150F7FFFE60001                 stb             LEDS
1899
 00FFE972 08DF25                          bsr             KeybdSendByte
1900
 00FFE974 08DF29                          bsr             KeybdWaitTx
1901
 00FFE976 05D                             tstb
1902
 00FFE977 02B009                          bmi             kbdiTryAgain
1903
 00FFE979 08DF05                          bsr             KeybdRecvByte   ; wait for response from keyboard
1904
 00FFE97B 04D                             tsta
1905
 00FFE97C 02B004                          bmi             kbdiTryAgain
1906
 00FFE97E 0C10FA                          cmpb    #$FA                                    ; ACK
1907
 00FFE980 02700C                          beq             kbdi0004
1908 4 robfinch
                              kbdiTryAgain:
1909 13 robfinch
 00FFE982 0313FF                          dey
1910
 00FFE984 026FC3                          bne       kbdi0002
1911 4 robfinch
                              .keybdErr:
1912 13 robfinch
 00FFE986 0CCFFE9AE                       ldd             #msgBadKeybd
1913 14 robfinch
 00FFE989 017FFFA41                       lbsr    DisplayStringCRLF
1914 4 robfinch
*** warning 1: Long branch within short branch range could be optimized
1915 13 robfinch
 00FFE98C 020014                          bra             ledxit
1916 4 robfinch
                              kbdi0004:
1917 13 robfinch
 00FFE98E 0C6002                          ldb             #2                      ; select scan code set #2
1918
 00FFE990 08DF07                          bsr             KeybdSendByte
1919
 00FFE992 08DF0B                          bsr             KeybdWaitTx
1920
 00FFE994 05D                             tstb
1921
 00FFE995 02BFEB                          bmi             kbdiTryAgain
1922
 00FFE997 08DEE7                          bsr             KeybdRecvByte   ; wait for response from keyboard
1923
 00FFE999 04D                             tsta
1924
 00FFE99A 02BFE6                          bmi             kbdiTryAgain
1925
 00FFE99C 0C10FA                          cmpb    #$FA
1926
 00FFE99E 026FE2                          bne             kbdiTryAgain
1927
 00FFE9A0 08DF7A                          bsr             KeybdGetID
1928 4 robfinch
                              ledxit:
1929 13 robfinch
 00FFE9A2 0C6007                          ldb             #$07
1930
 00FFE9A4 08DF63                          bsr             KeybdSetLED
1931
 00FFE9A6 08DF25                          bsr             Wait300ms
1932
 00FFE9A8 0C6000                          ldb             #$00
1933
 00FFE9AA 08DF5D                          bsr             KeybdSetLED
1934
 00FFE9AC 0350A6                          puls    d,y,pc
1935 4 robfinch
 
1936
                              msgBadKeybd:
1937 13 robfinch
 00FFE9AE 04B06507906206F061072           fcb             "Keyboard error",0
1938
 00FFE9B5 06402006507207206F072
1939
 00FFE9BC 000
1940 4 robfinch
 
1941 13 robfinch
                              ;------------------------------------------------------------------------------
1942
                              ; Calculate number of character in input buffer
1943
                              ;
1944
                              ; Parameters:
1945
                              ;               y = $Cn00000 where n is core id
1946
                              ; Returns:
1947
                              ;               d = number of bytes in buffer.
1948
                              ;------------------------------------------------------------------------------
1949
 
1950
                              kbdRcvCount:
1951
 00FFE9BD 04F                             clra
1952
 00FFE9BE 0E6A08128                       ldb             kbdTailRcv,y
1953
 00FFE9C1 0E0A08127                       subb    kbdHeadRcv,y
1954
 00FFE9C4 02C008                          bge             krcXit
1955
 00FFE9C6 0C6040                          ldb             #$40
1956
 00FFE9C8 0E0A08127                       subb    kbdHeadRcv,y
1957
 00FFE9CB 0EBA08128                       addb    kbdTailRcv,y
1958
                              krcXit:
1959
 00FFE9CE 039                             rts
1960
 
1961
 
1962 4 robfinch
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1963
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1964
 
1965 13 robfinch
                              KeybdIRQ:
1966
 00FFE9CF 0150B6FFFE30401                 lda             KEYBD+1                                         ; check status
1967
 00FFE9D4 085080                          bita    #$80                                                    ; was key pressed?
1968
 00FFE9D6 027034                          beq             notKbdIRQ                                       ; if not, exit
1969
 00FFE9D8 0150F6FFFE30400                 ldb             KEYBD                                                   ; get the scan code
1970
 00FFE9DD 01507FFFFE30401                 clr             KEYBD+1                                         ; clear receive register (write $00 to status reg)
1971
 00FFE9E2 034004                          pshs    b                                                                       ; save it off
1972
 00FFE9E4 0B6FF0010                       lda             IOFocusID                                       ; compute core memory address $Cn0000
1973
 00FFE9E7 05F                             clrb
1974
 00FFE9E8 048                             asla
1975
 00FFE9E9 048                             asla
1976
 00FFE9EA 048                             asla
1977
 00FFE9EB 048                             asla
1978
 00FFE9EC 08AC00                          ora             #$C00                                                   ; address $Cn0000
1979
 00FFE9EE 01F002                          tfr             d,y                                                             ; y =
1980
 00FFE9F0 08DFCB                          bsr             kbdRcvCount                             ; get count of scan codes in buffer
1981
 00FFE9F2 0C1040                          cmpb    #64                                                             ; check if buffer full?
1982
 00FFE9F4 024017                          bhs             kbdBufFull                              ; if buffer full, ignore new keystroke
1983
 00FFE9F6 01F021                          tfr             y,x                                                             ; compute fifo address
1984
 00FFE9F8 0E6A08128                       ldb             kbdTailRcv,y                    ; b = buffer index
1985
 00FFE9FB 035002                          puls    a                                                                       ; get back scancode
1986
 00FFE9FD 030040                          leax    kbdFifo,x                                       ; x = base address for fifo
1987
 00FFE9FF 0A7845                          sta             b,x                                                             ; store in buffer
1988
 00FFEA01 05C                             incb                                                                            ; increment buffer index
1989
 00FFEA02 0C403F                          andb    #$3f                                                    ; wrap around at 64 chars
1990
 00FFEA04 0E7A08128                       stb             kbdTailRcv,y                    ; update it
1991
 00FFEA07 08601C                          lda             #28                                                             ; Keyboard is IRQ #28
1992
 00FFEA09 0B7FF0011                       sta             IrqSource                                       ; stuff a byte indicating the IRQ source for PEEK()
1993
                              notKbdIRQ:
1994
 00FFEA0C 039                             rts
1995
                              kbdBufFull:
1996
 00FFEA0D 032601                          leas    1,s                                                             ; get rid of saved scancode
1997
 00FFEA0F 039                             rts
1998
 
1999
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2000
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2001
 
2002 4 robfinch
                              DBGCheckForKey:
2003 13 robfinch
 00FFEA10 020ECF                          bra             KeybdGetStatus
2004 4 robfinch
 
2005
 
2006
                              ; KeyState2 variable bit meanings
2007
                              ;1176543210
2008
                              ; ||||||||+ = shift
2009
                              ; |||||||+- = alt
2010
                              ; ||||||+-- = control
2011
                              ; |||||+--- = numlock
2012
                              ; ||||+---- = capslock
2013
                              ; |||+----- = scrolllock
2014
                              ; ||+------ = 
2015
                              ; |+------- =    "
2016
                              ; |         =    "
2017
                              ; |         =    "
2018
                              ; |         =    "
2019
                              ; +-------- = extended
2020
 
2021
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2022 13 robfinch
                              ; Keyboard get routine.
2023 4 robfinch
                              ;
2024 13 robfinch
                              ; The routine may get characters directly from the scancode input or less
2025
                              ; directly from the scancode buffer, if things are interrupt driven.
2026
                              ;
2027 4 robfinch
                              ; Parameters:
2028 13 robfinch
                              ;               b:  bit 11 = blocking status 1=blocking, 0=non blocking
2029
                              ;               b:      bit 1  = scancode source 1=scancode buffer, 0=direct
2030 4 robfinch
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2031
 
2032 13 robfinch
                              GetKey:
2033
 00FFEA12 034030                          pshs    x,y
2034
 00FFEA14 0D7126                          stb             KeybdBlock                              ; save off blocking status
2035 4 robfinch
                              dbgk2:
2036 13 robfinch
 00FFEA16 0D6126                          ldb             KeybdBlock
2037
 00FFEA18 034004                          pshs    b
2038
 00FFEA1A 0C5001                          bitb    #1                                                              ; what is the scancode source
2039
 00FFEA1C 02701A                          beq             dbgk20                                          ; branch if direct read
2040
 00FFEA1E 0150B6FFFFFFFE0                 lda             COREID                                          ; compute core memory address
2041
 00FFEA23 05F                             clrb
2042
 00FFEA24 048                             asla
2043
 00FFEA25 048                             asla
2044
 00FFEA26 048                             asla
2045
 00FFEA27 048                             asla
2046
 00FFEA28 08AC00                          ora             #$C00
2047
 00FFEA2A 01F002                          tfr             d,y                                                             ; y = $Cn0000
2048
 00FFEA2C 08DF8F                          bsr             kbdRcvCount
2049
 00FFEA2E 05D                             tstb                                                                            ; anything in buffer?
2050
 00FFEA2F 035004                          puls    b
2051
 00FFEA31 026018                          bne             dbgk1                                                   ; branch if something in buffer
2052
 00FFEA33 05D                             tstb
2053
 00FFEA34 02BFE0                          bmi             dbgk2                                                   ; if no key and blocking - loop
2054
 00FFEA36 02000E                          bra             dbgk24
2055
                              dbgk20:
2056
 00FFEA38 18E000000                       ldy             #0
2057
 00FFEA3B 08DEA4                          bsr             KeybdGetStatus
2058
 00FFEA3D 0C4080                          andb    #$80                                                    ; is key available?
2059
 00FFEA3F 035004                          puls    b
2060
 00FFEA41 026008                          bne             dbgk1                                                   ; branch if key
2061
 00FFEA43 05D                             tstb                                                                            ; block?
2062
 00FFEA44 02BFD0                          bmi             dbgk2                                                   ; If no key and blocking - loop
2063
                              dbgk24:
2064
 00FFEA46 0CCFFFFFF                       ldd             #-1                                                             ; return -1 if no block and no key
2065
 00FFEA49 0350B0                          puls    x,y,pc
2066 4 robfinch
                              dbgk1:
2067 13 robfinch
 00FFEA4B 18C000000                       cmpy    #0
2068
 00FFEA4E 026004                          bne             dbgk22
2069
 00FFEA50 08DEAB                          bsr             KeybdGetScancode        ; get scancode directly
2070
 00FFEA52 020011                          bra             dbgk23
2071
                              dbgk22:
2072
                                      ; Retrieve value from scancode buffer
2073
 00FFEA54 01F021                          tfr             y,x
2074
 00FFEA56 030040                          leax    kbdFifo,x                                       ; x = fifo address
2075
 00FFEA58 0E6A08127                       ldb             kbdHeadRcv,y                    ; b = buffer index
2076
 00FFEA5B 0A6A0D                          lda             b,x                                                             ; get the scancode
2077
 00FFEA5D 05C                             incb                                                                            ; increment fifo index
2078
 00FFEA5E 0C403F                          andb    #$3f                                                    ; and wrap around
2079
 00FFEA60 0E7A08127                       stb             kbdHeadRcv,y                    ; save it back
2080
 00FFEA63 01F089                          tfr             a,b                                                             ; the scancode is needed in accb
2081
                              dbgk23:
2082 4 robfinch
                              ;       lbsr    DispByteAsHex
2083
                                      ; Make sure there is a small delay between scancode reads
2084 13 robfinch
 00FFEA65 08E000014                       ldx             #20
2085 4 robfinch
                              dbgk3:
2086 13 robfinch
 00FFEA68 0301FF                          dex
2087
 00FFEA6A 026FFC                          bne             dbgk3
2088 4 robfinch
                                      ; switch on scan code
2089 13 robfinch
 00FFEA6C 0C10F0                          cmpb    #SC_KEYUP
2090
 00FFEA6E 026004                          bne             dbgk4
2091
 00FFEA70 0D7120                          stb             KeyState1                                       ; make KeyState1 <> 0
2092
 00FFEA72 020FA2                          bra             dbgk2                                                   ; loop back
2093 4 robfinch
                              dbgk4:
2094 13 robfinch
 00FFEA74 0C10E0                          cmpb    #SC_EXTEND
2095
 00FFEA76 026008                          bne             dbgk5
2096
 00FFEA78 096121                          lda             KeyState2
2097
 00FFEA7A 08A800                          ora             #$800
2098
 00FFEA7C 097121                          sta             KeyState2
2099
 00FFEA7E 020F96                          bra             dbgk2
2100 4 robfinch
                              dbgk5:
2101 13 robfinch
 00FFEA80 0C1014                          cmpb    #SC_CTRL
2102
 00FFEA82 026016                          bne             dbgkNotCtrl
2103
 00FFEA84 00D120                          tst             KeyState1
2104
 00FFEA86 026008                          bne             dbgk7
2105
 00FFEA88 096121                          lda             KeyState2
2106
 00FFEA8A 08A004                          ora             #4
2107
 00FFEA8C 097121                          sta             KeyState2
2108
 00FFEA8E 020006                          bra             dbgk8
2109 4 robfinch
                              dbgk7:
2110 13 robfinch
 00FFEA90 096121                          lda             KeyState2
2111
 00FFEA92 084FFB                          anda    #~4
2112
 00FFEA94 097121                          sta             KeyState2
2113 4 robfinch
                              dbgk8:
2114 13 robfinch
 00FFEA96 00F120                          clr             KeyState1
2115
 00FFEA98 020F7C                          bra             dbgk2
2116 4 robfinch
                              dbgkNotCtrl:
2117 13 robfinch
 00FFEA9A 0C1059                          cmpb    #SC_RSHIFT
2118
 00FFEA9C 026016                          bne             dbgkNotRshift
2119
 00FFEA9E 00D120                          tst             KeyState1
2120
 00FFEAA0 026008                          bne             dbgk9
2121
 00FFEAA2 096121                          lda             KeyState2
2122
 00FFEAA4 08A001                          ora             #1
2123
 00FFEAA6 097121                          sta             KeyState2
2124
 00FFEAA8 020006                          bra             dbgk10
2125 4 robfinch
                              dbgk9:
2126 13 robfinch
 00FFEAAA 096121                          lda             KeyState2
2127
 00FFEAAC 084FFE                          anda    #~1
2128
 00FFEAAE 097121                          sta             KeyState2
2129 4 robfinch
                              dbgk10:
2130 13 robfinch
 00FFEAB0 00F120                          clr             KeyState1
2131
 00FFEAB2 020F62                          bra             dbgk2
2132 4 robfinch
                              dbgkNotRshift:
2133 13 robfinch
 00FFEAB4 0C1077                          cmpb    #SC_NUMLOCK
2134
 00FFEAB6 026013                          bne             dbgkNotNumlock
2135
 00FFEAB8 096121                          lda             KeyState2
2136
 00FFEABA 088010                          eora    #16
2137
 00FFEABC 097121                          sta             KeyState2
2138
 00FFEABE 096122                          lda             KeyLED
2139
 00FFEAC0 088002                          eora    #2
2140
 00FFEAC2 097122                          sta             KeyLED
2141
 00FFEAC4 01F089                          tfr             a,b
2142
 00FFEAC6 04F                             clra
2143
 00FFEAC7 08DE40                          bsr             KeybdSetLED
2144
 00FFEAC9 020F4B                          bra             dbgk2
2145 4 robfinch
                              dbgkNotNumlock:
2146 13 robfinch
 00FFEACB 0C1058                          cmpb    #SC_CAPSLOCK
2147
 00FFEACD 026013                          bne             dbgkNotCapslock
2148
 00FFEACF 096121                          lda             KeyState2
2149
 00FFEAD1 088020                          eora    #32
2150
 00FFEAD3 097121                          sta             KeyState2
2151
 00FFEAD5 096122                          lda             KeyLED
2152
 00FFEAD7 088004                          eora    #4
2153
 00FFEAD9 097122                          sta             KeyLED
2154
 00FFEADB 01F089                          tfr             a,b
2155
 00FFEADD 04F                             clra
2156
 00FFEADE 08DE29                          bsr             KeybdSetLED
2157
 00FFEAE0 020F34                          bra             dbgk2
2158 4 robfinch
                              dbgkNotCapslock:
2159 13 robfinch
 00FFEAE2 0C107E                          cmpb    #SC_SCROLLLOCK
2160
 00FFEAE4 026013                          bne             dbgkNotScrolllock
2161
 00FFEAE6 096121                          lda             KeyState2
2162
 00FFEAE8 088040                          eora    #64
2163
 00FFEAEA 097121                          sta             KeyState2
2164
 00FFEAEC 096122                          lda             KeyLED
2165
 00FFEAEE 088001                          eora    #1
2166
 00FFEAF0 097122                          sta             KeyLED
2167
 00FFEAF2 01F089                          tfr             a,b
2168
 00FFEAF4 04F                             clra
2169
 00FFEAF5 08DE12                          bsr             KeybdSetLED
2170
 00FFEAF7 020F1D                          bra             dbgk2
2171 4 robfinch
                              dbgkNotScrolllock:
2172 13 robfinch
 00FFEAF9 0C1011                          cmpb    #SC_ALT
2173
 00FFEAFB 026016                          bne             dbgkNotAlt
2174
 00FFEAFD 00D120                          tst             KeyState1
2175
 00FFEAFF 026008                          bne             dbgk11
2176
 00FFEB01 096121                          lda             KeyState2
2177
 00FFEB03 08A002                          ora             #2
2178
 00FFEB05 097121                          sta             KeyState2
2179
 00FFEB07 020006                          bra             dbgk12
2180 4 robfinch
                              dbgk11:
2181 13 robfinch
 00FFEB09 096121                          lda             KeyState2
2182
 00FFEB0B 084FFD                          anda    #~2
2183
 00FFEB0D 097121                          sta             KeyState2
2184 4 robfinch
                              dbgk12:
2185 13 robfinch
 00FFEB0F 00F120                          clr             KeyState1
2186
 00FFEB11 020F03                          bra             dbgk2
2187 4 robfinch
                              dbgkNotAlt:
2188 13 robfinch
 00FFEB13 00D120                          tst             KeyState1
2189
 00FFEB15 027004                          beq             dbgk13
2190
 00FFEB17 00F120                          clr             KeyState1
2191
 00FFEB19 020EFB                          bra             dbgk2
2192 4 robfinch
                              dbgk13:
2193 13 robfinch
 00FFEB1B 096121                          lda             KeyState2               ; Check for CTRL-ALT-DEL
2194
 00FFEB1D 084006                          anda    #6
2195
 00FFEB1F 081006                          cmpa    #6
2196
 00FFEB21 026008                          bne             dbgk14
2197
 00FFEB23 0C1071                          cmpb    #SC_DEL
2198
 00FFEB25 026004                          bne             dbgk14
2199
 00FFEB27 06E90FFFFFFC                    jmp             [$FFFFFC]               ; jump to NMI vector
2200 4 robfinch
                              dbgk14:
2201 13 robfinch
 00FFEB2B 00D121                          tst             KeyState2               ; extended code?
2202
 00FFEB2D 02A00B                          bpl             dbgk15
2203
 00FFEB2F 096121                          lda             KeyState2
2204
 00FFEB31 0847FF                          anda    #$7FF
2205
 00FFEB33 097121                          sta             KeyState2
2206
 00FFEB35 08EFFE800                       ldx             #keybdExtendedCodes
2207
 00FFEB38 020017                          bra             dbgk18
2208 4 robfinch
                              dbgk15:
2209 13 robfinch
 00FFEB3A 096121                          lda             KeyState2               ; Is CTRL down?
2210
 00FFEB3C 085004                          bita    #4
2211
 00FFEB3E 027005                          beq             dbgk16
2212
 00FFEB40 08EFFE780                       ldx             #keybdControlCodes
2213
 00FFEB43 02000C                          bra             dbgk18
2214 4 robfinch
                              dbgk16:
2215 13 robfinch
 00FFEB45 085001                          bita    #1                                      ; Is shift down?
2216
 00FFEB47 027005                          beq             dbgk17
2217
 00FFEB49 08EFFE680                       ldx             #shiftedScanCodes
2218
 00FFEB4C 020003                          bra             dbgk18
2219 4 robfinch
                              dbgk17:
2220 13 robfinch
 00FFEB4E 08EFFE580                       ldx             #unshiftedScanCodes
2221 4 robfinch
                              dbgk18:
2222 13 robfinch
 00FFEB51 0E690FFFE580                    ldb             b,x                                     ; load accb with ascii from table
2223
 00FFEB55 04F                             clra
2224
 00FFEB56 0350B0                          puls    x,y,pc                  ; and return
2225 4 robfinch
 
2226
 
2227 13 robfinch
 00FFEB58 04B04505904204F041052           fcb             "KEYBOARD"
2228
 00FFEB5F 044
2229
 00FFEB60 FFEB6A                          fcw             KeybdOpen
2230
 00FFEB62 FFEB6B                          fcw             KeybdClose
2231
 00FFEB64 FFEB6C                          fcw             KeybdRead
2232
 00FFEB66 FFEB6D                          fcw             KeybdWrite
2233
 00FFEB68 FFEB6E                          fcw             KeybdSeek
2234 4 robfinch
 
2235
                              ; Keyboard Open:
2236
                              ; Initialize the keyboard buffer head and tail indexes
2237
                              ;
2238
                              KeybdOpen:
2239 13 robfinch
 00FFEB6A 039                             rts
2240 4 robfinch
 
2241
                              ; Keyboard Close:
2242
                              ; Nothing to do except maybe clear the keyboard buffer
2243
                              ;
2244
                              KeybdClose:
2245 13 robfinch
 00FFEB6B 039                             rts
2246 4 robfinch
                              ;
2247
                              KeybdRead:
2248 13 robfinch
 00FFEB6C 039                             rts
2249 4 robfinch
                              ;
2250
                              KeybdWrite:
2251 13 robfinch
 00FFEB6D 039                             rts
2252 4 robfinch
 
2253
                              KeybdSeek:
2254 13 robfinch
 00FFEB6E 039                             rts
2255 4 robfinch
 
2256 13 robfinch
                              ;==============================================================================
2257
                              ; Serial I/O
2258
                              ;==============================================================================
2259
 
2260
                              ; ============================================================================
2261
                              ;        __
2262
                              ;   \\__/ o\    (C) 2022  Robert Finch, Waterloo
2263
                              ;    \  __ /    All rights reserved.
2264
                              ;     \/_//     robfinch@opencores.org
2265
                              ;       ||
2266
                              ;
2267
                              ;
2268
                              ; Serial port routines for a WDC6551 compatible circuit.
2269
                              ;
2270
                              ; This source file is free software: you can redistribute it and/or modify
2271
                              ; it under the terms of the GNU Lesser General Public License as published
2272
                              ; by the Free Software Foundation, either version 3 of the License, or
2273
                              ; (at your option) any later version.
2274
                              ;
2275
                              ; This source file is distributed in the hope that it will be useful,
2276
                              ; but WITHOUT ANY WARRANTY; without even the implied warranty of
2277
                              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2278
                              ; GNU General Public License for more details.
2279
                              ;
2280
                              ; You should have received a copy of the GNU General Public License
2281
                              ; along with this program.  If not, see .
2282
                              ;
2283
                              ; ============================================================================
2284
                              ;
2285 4 robfinch
                              ;------------------------------------------------------------------------------
2286 13 robfinch
                              ; Initialize serial port.
2287
                              ;
2288
                              ; Clear buffer indexes. Two bytes are used for the buffer index even though
2289
                              ; only a single byte is needed. This is for convenience in calculating the
2290
                              ; number of characters in the buffer, done later. The upper byte remains at
2291
                              ; zero.
2292
                              ; The port is initialized for 9600 baud, 1 stop bit and 8 bits data sent.
2293
                              ; The internal baud rate generator is used.
2294
                              ;
2295
                              ; Parameters:
2296
                              ;               none
2297
                              ; Modifies:
2298
                              ;               d
2299
                              ; Returns:
2300
                              ;               none
2301
                              ;------------------------------------------------------------------------------
2302
 
2303
                              InitSerial:
2304
                              SerialInit:
2305
 00FFEB6F 04F                             clra
2306
 00FFEB70 05F                             clrb
2307
 00FFEB71 0DD130                          std             SerHeadRcv-1
2308
 00FFEB73 0DD132                          std             SerTailRcv-1
2309
 00FFEB75 0DD135                          std             SerHeadXmit-1
2310
 00FFEB77 0DD137                          std             SerTailXmit-1
2311
 00FFEB79 00F139                          clr             SerRcvXon
2312
 00FFEB7B 00F140                          clr             SerRcvXoff
2313
 00FFEB7D 0150B6FFFFFFFE0                 lda             COREID
2314
                              sini1:
2315
 00FFEB82 0B1FF0010                       cmpa    IOFocusID
2316
 00FFEB85 026FFB                          bne             sini1
2317
 00FFEB87 0C6009                          ldb             #$09                                            ; dtr,rts active, rxint enabled, no parity
2318
 00FFEB89 0150F7FFFE30102                 stb             ACIA+ACIA_CMD
2319 14 robfinch
 00FFEB8E 0C601F                          ldb             #$1F                                            ; baud 9600, 1 stop bit, 8 bit, internal baud gen
2320 13 robfinch
 00FFEB90 0150F7FFFE30103                 stb             ACIA+ACIA_CTRL
2321
 00FFEB95 0C60A6                          ldb             #$0A6                                           ; diable fifos, reset fifos
2322
 00FFEB97 0150F7FFFE3010B                 stb             ACIA+ACIA_CTRL2
2323
 00FFEB9C 039                             rts
2324
 
2325
                              ;------------------------------------------------------------------------------
2326
                              ; SerialGetChar
2327
                              ;
2328
                              ; Check the serial port buffer to see if there's a char available. If there's
2329
                              ; a char available then return it. If the buffer is almost empty then send an
2330
                              ; XON.
2331
                              ;
2332
                              ; Stack Space:
2333
                              ;               2 words
2334
                              ; Parameters:
2335
                              ;               none
2336
                              ; Modifies:
2337
                              ;               none
2338
                              ; Returns:
2339
                              ;               d = character or -1
2340
                              ;------------------------------------------------------------------------------
2341
 
2342
                              SerialGetChar:
2343
 00FFEB9D 034030                                  pshs    x,y
2344
 00FFEB9F 18E000000                               ldy             #0
2345
 00FFEBA2 01A010                                  sei                                                                             ; disable interrupts
2346
 00FFEBA4 08D082                                  bsr             SerialRcvCount                  ; check number of chars in receive buffer
2347
 00FFEBA6 0C1008                                  cmpb    #8                                                      ; less than 8?
2348
 00FFEBA8 02200C                                  bhi             sgc2
2349
 00FFEBAA 0D6139                                  ldb             SerRcvXon                               ; skip sending XON if already sent
2350
 00FFEBAC 026008                                  bne       sgc2            ; XON already sent?
2351
 00FFEBAE 0C6011                                  ldb             #XON                                            ; if <8 send an XON
2352
 00FFEBB0 00F140                                  clr             SerRcvXoff                      ; clear XOFF status
2353
 00FFEBB2 0D7139                                  stb             SerRcvXon                               ; flag so we don't send it multiple times
2354
 00FFEBB4 08D052                                  bsr             SerialPutChar
2355
                              sgc2:
2356
 00FFEBB6 0D6131                                  ldb             SerHeadRcv                      ; check if anything is in buffer
2357
 00FFEBB8 0D1133                                  cmpb    SerTailRcv
2358
 00FFEBBA 02700A                                  beq             sgcNoChars                      ; no?
2359
 00FFEBBC 08EBFF000                               ldx             #SerRcvBuf
2360
 00FFEBBF 04F                                     clra
2361
 00FFEBC0 0E6835                                  ldb             b,x                                                     ; get byte from buffer
2362
 00FFEBC2 00C131                                  inc             SerHeadRcv                      ; 4k wrap around
2363
 00FFEBC4 020003                                  bra             sgcXit
2364
                              sgcNoChars:
2365
 00FFEBC6 0CCFFFFFF                               ldd             #-1
2366
                              sgcXit:
2367
 00FFEBC9 01C0EF                                  cli
2368
 00FFEBCB 0350B0                                  puls    x,y,pc
2369
 
2370
                              ;------------------------------------------------------------------------------
2371
                              ; SerialPeekChar
2372
                              ;
2373
                              ; Check the serial port buffer to see if there's a char available. If there's
2374
                              ; a char available then return it. But don't update the buffer indexes. No need
2375
                              ; to send an XON here.
2376
                              ;
2377
                              ; Stack Space:
2378
                              ;               0 words
2379
                              ; Parameters:
2380
                              ;               none
2381
                              ; Modifies:
2382
                              ;               none
2383
                              ; Returns:
2384
                              ;               d = character or -1
2385
                              ;------------------------------------------------------------------------------
2386
 
2387
                              SerialPeekChar:
2388
 00FFEBCD 034011                          pshs    x,ccr
2389
 00FFEBCF 01A010                          sei
2390
 00FFEBD1 0D6131                          ldb             SerHeadRcv                              ; check if anything is in buffer
2391
 00FFEBD3 0D1133                          cmpb    SerTailRcv
2392
 00FFEBD5 027008                          beq             spcNoChars                              ; no?
2393
 00FFEBD7 08EBFF000                       ldx             #SerRcvBuf
2394
 00FFEBDA 04F                             clra
2395
 00FFEBDB 0E6815                          ldb             b,x                                                             ; get byte from buffer
2396
 00FFEBDD 020003                          bra             spcXit
2397
                              spcNoChars:
2398
 00FFEBDF 0CCFFFFFF                       ldd             #-1
2399
                              spcXit:
2400
 00FFEBE2 035091                          puls    x,ccr,pc
2401
 
2402
                              ;------------------------------------------------------------------------------
2403
                              ; SerialPeekChar
2404
                              ;               Get a character directly from the I/O port. This bypasses the input
2405
                              ; buffer.
2406
                              ;
2407
                              ; Stack Space:
2408
                              ;               0 words
2409
                              ; Parameters:
2410
                              ;               none
2411
                              ; Modifies:
2412
                              ;               d
2413
                              ; Returns:
2414
                              ;               d = character or -1
2415
                              ;------------------------------------------------------------------------------
2416
 
2417
                              SerialPeekCharDirect:
2418
 00FFEBE4 0150B6FFFFFFFE0                 lda             COREID                                                  ; Ensure we have the IO Focus
2419
 00FFEBE9 0B1FF0010                       cmpa    IOFocusID
2420
 00FFEBEC 026014                          bne             spcd0001
2421
                                      ; Disallow interrupts between status read and rx read.
2422
 00FFEBEE 01A010                          sei
2423
 00FFEBF0 0150F6FFFE30101                 ldb             ACIA+ACIA_STAT
2424
 00FFEBF5 0C5008                          bitb    #8                                                                      ; look for Rx not empty
2425
 00FFEBF7 027009                          beq             spcd0001
2426
 00FFEBF9 04F                             clra
2427
 00FFEBFA 0150F6FFFE30100                 ldb             ACIA+ACIA_RX
2428
 00FFEBFF 01C0EF                          cli
2429
 00FFEC01 039                             rts
2430
                              spcd0001:
2431
 00FFEC02 0CCFFFFFF                       ldd             #-1
2432
 00FFEC05 01C0EF                          cli
2433
 00FFEC07 039                             rts
2434
 
2435
                              ;------------------------------------------------------------------------------
2436
                              ; SerialPutChar
2437
                              ;    Put a character to the serial transmitter. This routine blocks until the
2438
                              ; transmitter is empty.
2439
                              ;
2440
                              ; Stack Space
2441
                              ;               0 words
2442
                              ; Parameters:
2443
                              ;               b = character to put
2444
                              ; Modifies:
2445
                              ;               none
2446
                              ;------------------------------------------------------------------------------
2447
 
2448
                              SerialPutChar:
2449
 00FFEC08 034003                          pshs    a,ccr
2450
                              spc0001:
2451
 00FFEC0A 0150B6FFFFFFFE0                 lda             COREID                                  ; Ensure we have the IO Focus
2452
 00FFEC0F 0B1FF0010                       cmpa    IOFocusID
2453
 00FFEC12 026FF6                          bne             spc0001
2454
 00FFEC14 01C0EF                          cli                                                                             ; provide a window for an interrupt to occur
2455
 00FFEC16 01A010                          sei
2456
                                      ; Between the status read and the transmit do not allow an
2457
                                      ; intervening interrupt.
2458
 00FFEC18 0150B6FFFE30101                 lda             ACIA+ACIA_STAT  ; wait until the uart indicates tx empty
2459
 00FFEC1D 085010                          bita    #16                                                     ; bit #4 of the status reg
2460
 00FFEC1F 027FE9                          beq             spc0001                     ; branch if transmitter is not empty
2461
 00FFEC21 0150F7FFFE30100                 stb             ACIA+ACIA_TX            ; send the byte
2462
 00FFEC26 035083                          puls    a,ccr,pc
2463
 
2464
                              ;------------------------------------------------------------------------------
2465
                              ; Calculate number of character in input buffer
2466
                              ;
2467
                              ; Parameters:
2468
                              ;               y = 0 if current core, otherwise reference to core memory area $Cyxxxx
2469
                              ; Returns:
2470
                              ;               d = number of bytes in buffer.
2471
                              ;------------------------------------------------------------------------------
2472
 
2473
                              SerialRcvCount:
2474
 00FFEC28 04F                             clra
2475
 00FFEC29 0E6A08133                       ldb             SerTailRcv,y
2476
 00FFEC2C 0E0A08131                       subb    SerHeadRcv,y
2477
 00FFEC2F 02C009                          bge             srcXit
2478
 00FFEC31 0CC001000                       ldd             #$1000
2479
 00FFEC34 0A3A08131                       subd    SerHeadRcv,y
2480
 00FFEC37 0E3A08133                       addd    SerTailRcv,y
2481
                              srcXit:
2482
 00FFEC3A 039                             rts
2483
 
2484
                              ;------------------------------------------------------------------------------
2485
                              ; Serial IRQ routine
2486
                              ;
2487
                              ; Keeps looping as long as it finds characters in the ACIA recieve buffer/fifo.
2488
                              ; Received characters are buffered. If the buffer becomes full, new characters
2489
                              ; will be lost.
2490
                              ;
2491
                              ; Parameters:
2492
                              ;               none
2493
                              ; Modifies:
2494
                              ;               d,x
2495
                              ; Returns:
2496
                              ;               none
2497
                              ;------------------------------------------------------------------------------
2498
 
2499
                              SerialIRQ:
2500
                              sirqNxtByte:
2501
 00FFEC3B 0150F6FFFE30101                 ldb             ACIA+ACIA_STAT  ; check the status
2502
 00FFEC40 0C5008                          bitb    #$08                                            ; bit 3 = rx full
2503
 00FFEC42 027049                          beq             notRxInt
2504
 00FFEC44 0150F6FFFE30100                 ldb             ACIA+ACIA_RX            ; get data from Rx buffer to clear interrupt
2505
 00FFEC49 0C1014                          cmpb    #CTRLT                                  ; detect special keystroke
2506
 00FFEC4B 026000                          bne     sirq0001
2507
                              ;       bsr     DumpTraceQueue
2508
                              sirq0001:
2509
 00FFEC4D 034004                          pshs    b
2510
                                      ; Compute receive buffer address
2511
 00FFEC4F 0B6FF0010                       lda             IOFocusID
2512
 00FFEC52 048                             asla
2513
 00FFEC53 048                             asla
2514
 00FFEC54 048                             asla
2515
 00FFEC55 048                             asla
2516
 00FFEC56 08AC00                          ora             #$C00
2517
 00FFEC58 05F                             clrb
2518
 00FFEC59 01F002                          tfr             d,y
2519
 00FFEC5B 035004                          puls    b
2520
 00FFEC5D 0A6A08133                       lda             SerTailRcv,y                    ; check if recieve buffer full
2521
 00FFEC60 04C                             inca
2522
 00FFEC61 0A1A08131                       cmpa    SerHeadRcv,y
2523
 00FFEC64 027027                          beq             sirqRxFull
2524
 00FFEC66 0A7A08133                       sta             SerTailRcv,y            ; update tail pointer
2525
 00FFEC69 04A                             deca                                                                    ; backup
2526
 00FFEC6A 01E089                          exg             a,b
2527
 00FFEC6C 030A0A000BFF000                 leax    SerRcvBuf,y                     ; x = buffer address
2528
 00FFEC71 0A7A0F                          sta             b,x                                                     ; store recieved byte in buffer
2529
 00FFEC73 06DA08140                       tst             SerRcvXoff,y            ; check if xoff already sent
2530
 00FFEC76 026FC3                          bne             sirqNxtByte
2531
 00FFEC78 08DFAE                          bsr             SerialRcvCount  ; if more than 4080 chars in buffer
2532
 00FFEC7A 0C1FF0                          cmpb    #4080
2533
 00FFEC7C 025FBD                          blo             sirqNxtByte
2534
 00FFEC7E 0C6013                          ldb             #XOFF                                           ; send an XOFF
2535
 00FFEC80 06FA08139                       clr             SerRcvXon,y                     ; clear XON status
2536
 00FFEC83 0E7A08140                       stb             SerRcvXoff,y            ; set XOFF status
2537
 00FFEC86 0150F7FFFE30100                 stb             ACIA+ACIA_TX
2538
 00FFEC8B 020FAE                          bra             sirqNxtByte     ; check the status for another byte
2539
                              sirqRxFull:
2540
                              notRxInt:
2541
 00FFEC8D 039                             rts
2542
 
2543
                              nmeSerial:
2544
 00FFEC8E 05306507206906106C000           fcb             "Serial",0
2545
 
2546
                              ;------------------------------------------------------------------------------
2547
                              ; Put a string to the serial port.
2548
                              ;
2549
                              ; Parameters:
2550
                              ;               d = pointer to string
2551
                              ; Modifies:
2552
                              ;               none
2553
                              ; Returns:
2554
                              ;               none
2555
                              ;------------------------------------------------------------------------------
2556
 
2557
                              SerialPutString:
2558
 00FFEC95 034016                          pshs    d,x
2559
 00FFEC97 01F001                          tfr             d,x
2560
                              sps2:
2561
 00FFEC99 0E6804                          ldb             ,x
2562
 00FFEC9B 027006                          beq             spsXit
2563
 00FFEC9D 030001                          inx
2564
 00FFEC9F 08DF67                          bsr             SerialPutChar
2565
 00FFECA1 020FF6                          bra             sps2
2566
                              spsXit:
2567
 00FFECA3 035096                          puls    d,x,pc
2568
 
2569
                              ;------------------------------------------------------------------------------
2570
                              ; A little routine to test serial output.
2571
                              ;
2572
                              ; Parameters:
2573
                              ;               none
2574
                              ; Modifies:
2575
                              ;               none
2576
                              ; Returns:
2577
                              ;               none
2578
                              ;------------------------------------------------------------------------------
2579
 
2580
                              SerialOutputTest:
2581
 00FFECA5 034006                          pshs    d
2582
 00FFECA7 0CCFFECC5                       ldd             #msgSerialTest
2583 14 robfinch
 00FFECAA 017FFF709                       lbsr    DisplayString
2584 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
2585
 00FFECAD 08DEC0                          bsr             SerialInit
2586
                              sotst1:
2587
 00FFECAF 0C6011                          ldb             #XON
2588
 00FFECB1 08DF55                          bsr             SerialPutChar
2589
 00FFECB3 08DF53                          bsr             SerialPutChar
2590
 00FFECB5 08DF51                          bsr             SerialPutChar
2591
 00FFECB7 0CCFFECC5                       ldd             #msgSerialTest
2592
 00FFECBA 08DFD9                          bsr             SerialPutString
2593
 00FFECBC 01700001B                       lbsr    INCH
2594
 00FFECBF 0C1003                          cmpb    #CTRLC
2595
 00FFECC1 026FEC                          bne             sotst1
2596
 00FFECC3 035086                          puls    d,pc
2597
 
2598
                              msgSerialTest:
2599
 00FFECC5 05306507206906106C020           fcb     "Serial port test",CR,LF,0
2600
 00FFECCC 07006F072074020074065
2601
 00FFECD3 07307400D00A000
2602
 
2603
 
2604
                              ;------------------------------------------------------------------------------
2605 4 robfinch
                              ; Check if there is a keyboard character available. If so return true (<0)
2606
                              ; otherwise return false (0) in accb.
2607
                              ;------------------------------------------------------------------------------
2608
                              ;
2609
                              KeybdCheckForKeyDirect:
2610 13 robfinch
 00FFECD8 020D36                          bra             DBGCheckForKey
2611 4 robfinch
 
2612
                              ;------------------------------------------------------------------------------
2613
                              ;------------------------------------------------------------------------------
2614
                              INCH:
2615 13 robfinch
 00FFECDA 034004                          pshs    b
2616
                              INCH2:
2617
 00FFECDC 0150F6FFFFFFFE0                 ldb             COREID
2618
 00FFECE1 0F1FF0010                       cmpb    IOFocusID       ; if we do not have focus, block
2619
 00FFECE4 026FF6                          bne             INCH2
2620
                              ;       ldb             #$800                   ; block if no key available, get scancode directly
2621
                              ;       bra             GetKey
2622
                              ;       jsr             [CharInVec]     ; vector is being overwritten somehow
2623
 00FFECE6 017FFFEFB                       lbsr    SerialPeekCharDirect
2624
*** warning 1: Long branch within short branch range could be optimized
2625
 00FFECE9 04D                             tsta
2626
 00FFECEA 02B003                          bmi             INCH1                   ; block if no key available
2627
 00FFECEC 032601                          leas    1,s                             ; get rid of blocking status
2628
 00FFECEE 039                             rts
2629
                              INCH1:
2630
 00FFECEF 035004                          puls    b                                       ; check blocking status
2631
 00FFECF1 05D                             tstb
2632
 00FFECF2 02BFE6                          bmi     INCH                    ; if blocking, loop
2633
 00FFECF4 0CCFFFFFF                       ldd             #-1                             ; return -1 if no char available
2634
 00FFECF7 039                             rts
2635 4 robfinch
 
2636
                              INCHE:
2637 13 robfinch
 00FFECF8 08DFE0                          bsr             INCH
2638
 00FFECFA 020009                          bra             INCHEK3
2639 4 robfinch
 
2640
                              INCHEK:
2641 13 robfinch
 00FFECFC 08DFDC                          bsr             INCH
2642
 00FFECFE 01507DFFFFFCA00                 tst             KeybdEcho
2643
 00FFED03 02700C                          beq             INCHEK1
2644 4 robfinch
                              INCHEK3:
2645 13 robfinch
 00FFED05 08100D                          cmpa    #CR
2646
 00FFED07 026005                          bne             INCHEK2
2647
 00FFED09 017FFE3C6                       lbsr            CRLF
2648 4 robfinch
*** warning 1: Long branch within short branch range could be optimized
2649 13 robfinch
 00FFED0C 020003                          bra             INCHEK1
2650 4 robfinch
                              INCHEK2:
2651 14 robfinch
 00FFED0E 017FFF5E4                       lbsr    DisplayChar
2652 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
2653 4 robfinch
                              INCHEK1:
2654 13 robfinch
 00FFED11 039                             rts
2655 4 robfinch
 
2656
                              OUTCH:
2657 13 robfinch
 00FFED12 06E90F000800                    jmp             [CharOutVec]
2658 4 robfinch
 
2659
                              ;------------------------------------------------------------------------------
2660
                              ; r1 0=echo off, non-zero = echo on
2661
                              ;------------------------------------------------------------------------------
2662
                              ;
2663
                              SetKeyboardEcho:
2664 13 robfinch
 00FFED16 0150F7FFFFFCA00                 stb             KeybdEcho
2665
 00FFED1B 039                             rts
2666 4 robfinch
 
2667
 
2668
                              ;------------------------------------------------------------------------------
2669
                              ; Parameters:
2670
                              ;               x,d     bitmap of sprites to enable
2671
                              ;------------------------------------------------------------------------------
2672
 
2673
                              ShowSprites:
2674 13 robfinch
 00FFED1C 0150BFFFFE103C0                 stx             SPRITE_CTRL+SPRITE_EN
2675
 00FFED21 0150FDFFFE103C2                 std             SPRITE_CTRL+SPRITE_EN+2
2676
 00FFED26 039                             rts
2677 4 robfinch
 
2678
                              ;==============================================================================
2679 13 robfinch
                              ; Femtiki Operating System.
2680
                              ;==============================================================================
2681
 
2682
                              OSCallTbl:
2683
 00FFED27 000000                          fcw             0
2684
 00FFED29 000000                          fcw             0
2685
 00FFED2B 000000                          fcw             0
2686
 00FFED2D 000000                          fcw             0
2687
 00FFED2F 000000                          fcw             0
2688
 00FFED31 000000                          fcw             0
2689
 00FFED33 000000                          fcw             0
2690
 00FFED35 000000                          fcw             0
2691
 00FFED37 000000                          fcw             0
2692
 00FFED39 000000                          fcw             0
2693
 00FFED3B 000000                          fcw             0
2694
 00FFED3D 000000                          fcw             0
2695
 00FFED3F 000000                          fcw             0
2696
 00FFED41 000000                          fcw             0
2697
 00FFED43 000000                          fcw             0
2698
 00FFED45 000000                          fcw             0
2699
 00FFED47 000000                          fcw             0
2700
 00FFED49 000000                          fcw             0
2701
 00FFED4B 000000                          fcw             0
2702
 00FFED4D 000000                          fcw             0
2703
 00FFED4F 000000                          fcw             0
2704
 00FFED51 000000                          fcw             0
2705
 00FFED53 FFED84                          fcw             ReleaseIOFocus
2706
 00FFED55 000000                          fcw             0
2707
 00FFED57 FFED6D                          fcw             RequestIOFocus
2708
 
2709
                              OSCall:
2710
                                      ; wait for availability
2711
                              osc1:
2712
 00FFED59 07DEF0011                       tst             OSSEMA+1
2713
 00FFED5C 027FFB                          beq             osc1
2714
 00FFED5E 058                             aslb
2715
 00FFED5F 08EFFED27                       ldx             #OSCallTbl
2716
 00FFED62 03A                             abx
2717
 00FFED63 06D804                          tst             ,x
2718
 00FFED65 027002                          beq             oscx
2719
 00FFED67 06E904                          jmp             [,x]
2720
                              oscx:
2721
 00FFED69 07FEF0011                       clr             OSSEMA+1
2722
 00FFED6C 039                             rts
2723
 
2724
                              RequestIOFocus:
2725
 00FFED6D 0150F6FFFFFFFE0                 ldb             COREID
2726
 00FFED72 08EFF0000                       ldx             #IOFocusList
2727
 00FFED75 03A                             abx
2728
 00FFED76 0A7804                          sta             ,x
2729
 00FFED78 07DFF0010                       tst             IOFocusID
2730
 00FFED7B 126FFFFEB                       lbne    oscx
2731
*** warning 1: Long branch within short branch range could be optimized
2732
 00FFED7E 0F7FF0010                       stb             IOFocusID
2733
 00FFED81 016FFFFE5                       lbra    oscx
2734
*** warning 1: Long branch within short branch range could be optimized
2735
 
2736
                              ReleaseIOFocus:
2737
 00FFED84 0150F6FFFFFFFE0                 ldb             COREID
2738
 00FFED89 08EFF0000                       ldx             #IOFocusList
2739
 00FFED8C 03A                             abx
2740
 00FFED8D 06F804                          clr             ,x                                              ; clear the request indicator
2741 14 robfinch
 00FFED8F 017FFF463                       lbsr    CopyScreenToVirtualScreen
2742 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
2743
 00FFED92 0F1FF0010                       cmpb    IOFocusID                       ; are we the one with the focus?
2744
 00FFED95 126FFFFD1                       lbne    oscx
2745
*** warning 1: Long branch within short branch range could be optimized
2746
                                      ; We had the focus, so now a new core needs the focus.
2747
                                      ; Search the focus list for a requestor. If no requester
2748
                                      ; is found, give focus to core #1.
2749
 00FFED98 08600F                          lda             #15
2750
                              riof2:
2751
 00FFED9A 05C                             incb
2752
 00FFED9B 0C400F                          andb    #15
2753
 00FFED9D 03A                             abx
2754
 00FFED9E 06D804                          tst             ,x
2755
 00FFEDA0 026009                          bne             riof1
2756
 00FFEDA2 04A                             deca
2757
 00FFEDA3 026FF5                          bne             riof2
2758
                                      ; If no focus is requested by anyone, give to core #1
2759
 00FFEDA5 0C6001                          ldb             #1
2760
 00FFEDA7 086018                          lda             #24
2761
 00FFEDA9 0A7804                          sta             ,x
2762
                              riof1:
2763
 00FFEDAB 0F7FF0010                       stb             IOFocusID
2764 14 robfinch
 00FFEDAE 017FFF40D                       lbsr    CopyVirtualScreenToScreen
2765 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
2766
 00FFEDB1 016FFFFB5                       lbra    oscx
2767
*** warning 1: Long branch within short branch range could be optimized
2768
 
2769
 
2770
                              ;==============================================================================
2771
                              ; Disassembler
2772
                              ;==============================================================================
2773
 
2774
                              ; ============================================================================
2775
                              ;        __
2776
                              ;   \\__/ o\    (C) 2013-2022  Robert Finch, Waterloo
2777
                              ;    \  __ /    All rights reserved.
2778
                              ;     \/_//     robfinch@opencores.org
2779
                              ;       ||
2780
                              ;
2781
                              ;
2782
                              ; BSD 3-Clause License
2783
                              ; Redistribution and use in source and binary forms, with or without
2784
                              ; modification, are permitted provided that the following conditions are met:
2785
                              ;
2786
                              ; 1. Redistributions of source code must retain the above copyright notice, this
2787
                              ;    list of conditions and the following disclaimer.
2788
                              ;
2789
                              ; 2. Redistributions in binary form must reproduce the above copyright notice,
2790
                              ;    this list of conditions and the following disclaimer in the documentation
2791
                              ;    and/or other materials provided with the distribution.
2792
                              ;
2793
                              ; 3. Neither the name of the copyright holder nor the names of its
2794
                              ;    contributors may be used to endorse or promote products derived from
2795
                              ;    this software without specific prior written permission.
2796
                              ;
2797
                              ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2798
                              ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2799
                              ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2800
                              ; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
2801
                              ; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2802
                              ; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2803
                              ; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
2804
                              ; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2805
                              ; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2806
                              ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2807
                              ;
2808
                              ; ============================================================================
2809
                              ;
2810
                              ; Disassembler
2811
                              ;
2812
                              ;
2813
                              DIRECT  EQU     1
2814
                              LSREL           EQU     2
2815
                              IMMB            EQU     3
2816
                              SREL            EQU     4
2817
                              NDX                     EQU     5
2818
                              EXT                     EQU     6
2819
                              IMMW            EQU     7
2820
                              FAREXT  EQU     8
2821 14 robfinch
                              TFREXG  EQU     9
2822 13 robfinch
 
2823
                              distbl1:
2824
                                      ; 00 to 0F
2825
 00FFEDB4 04E045047020001                 fcb             "NEG ", DIRECT
2826
 00FFEDB9 020020020020000                 fcb             "    ", 0
2827
 00FFEDBE 020020020020000                 fcb             "    ", 0
2828
 00FFEDC3 04304F04D020001                 fcb             "COM ", DIRECT
2829
 00FFEDC8 04C053052020001                 fcb             "LSR ", DIRECT
2830
 00FFEDCD 020020020020000                 fcb             "    ", 0
2831
 00FFEDD2 05204F052020001                 fcb             "ROR ", DIRECT
2832
 00FFEDD7 041053052020001                 fcb             "ASR ", DIRECT
2833
 00FFEDDC 04105304C020001                 fcb             "ASL ", DIRECT
2834
 00FFEDE1 05204F04C020001                 fcb             "ROL ", DIRECT
2835
 00FFEDE6 044045043020001                 fcb             "DEC ", DIRECT
2836
 00FFEDEB 020020020020000                 fcb             "    ", 0
2837
 00FFEDF0 04904E043020001                 fcb             "INC ", DIRECT
2838
 00FFEDF5 054053054020001                 fcb             "TST ", DIRECT
2839
 00FFEDFA 04A04D050020001                 fcb             "JMP ", DIRECT
2840
 00FFEDFF 04304C052020001                 fcb             "CLR ", DIRECT
2841
 
2842
                                      ; 10 to 1F
2843
 00FFEE04 020020020020000                 fcb             "    ", 0
2844
 00FFEE09 020020020020000                 fcb             "    ", 0
2845
 00FFEE0E 04E04F050020000                 fcb             "NOP ", 0
2846
 00FFEE13 05305904E043000                 fcb             "SYNC", 0
2847
 00FFEE18 020020020020000                 fcb             "    ", 0
2848
 00FFEE1D 046041052020000                 fcb             "FAR ", 0
2849
 00FFEE22 04C042052041002                 fcb             "LBRA", LSREL
2850
 00FFEE27 04C042053052002                 fcb             "LBSR", LSREL
2851
 00FFEE2C 020020020020000                 fcb             "    ", 0
2852
 00FFEE31 044041041020000                 fcb             "DAA ", 0
2853
 00FFEE36 04F052043043003                 fcb             "ORCC", IMMB
2854
 00FFEE3B 020020020020000                 fcb             "    ", 0
2855
 00FFEE40 04104E044043003                 fcb             "ANDC", IMMB
2856
 00FFEE45 053045058020000                 fcb             "SEX ", 0
2857 14 robfinch
 00FFEE4A 045058047020009                 fcb             "EXG ", TFREXG
2858
 00FFEE4F 054046052020009                 fcb             "TFR ", TFREXG
2859 13 robfinch
 
2860
                                      ; 20 to 2F
2861
 00FFEE54 042052041020004                 fcb             "BRA ", SREL
2862
 00FFEE59 04205204E020004                 fcb             "BRN ", SREL
2863
 00FFEE5E 042048049020004                 fcb             "BHI ", SREL
2864
 00FFEE63 04204C053020004                 fcb             "BLS ", SREL
2865
 00FFEE68 042048053020004                 fcb             "BHS ", SREL
2866
 00FFEE6D 04204C04F020004                 fcb             "BLO ", SREL
2867
 00FFEE72 04204E045020004                 fcb             "BNE ", SREL
2868
 00FFEE77 042045051020004                 fcb             "BEQ ", SREL
2869
 00FFEE7C 042056043020004                 fcb             "BVC ", SREL
2870
 00FFEE81 042056053020004                 fcb             "BVS ", SREL
2871
 00FFEE86 04205004C020004                 fcb             "BPL ", SREL
2872
 00FFEE8B 04204D049020004                 fcb             "BMI ", SREL
2873
 00FFEE90 042047045020004                 fcb             "BGE ", SREL
2874
 00FFEE95 04204C054020004                 fcb             "BLT ", SREL
2875
 00FFEE9A 042047054020004                 fcb             "BGT ", SREL
2876
 00FFEE9F 04204C045020004                 fcb             "BLE ", SREL
2877
 
2878
                                      ; 30 to 3F
2879
 00FFEEA4 04C045041058005                 fcb             "LEAX", NDX
2880
 00FFEEA9 04C045041059005                 fcb             "LEAY", NDX
2881
 00FFEEAE 04C045041053005                 fcb             "LEAS", NDX
2882
 00FFEEB3 04C045041055005                 fcb             "LEAU", NDX
2883
 00FFEEB8 050053048053003                 fcb             "PSHS", IMMB
2884
 00FFEEBD 05005504C053003                 fcb             "PULS", IMMB
2885
 00FFEEC2 050053048055003                 fcb             "PSHU", IMMB
2886
 00FFEEC7 05005504C055003                 fcb             "PULU", IMMB
2887
 00FFEECC 052054046020000                 fcb             "RTF ", 0
2888
 00FFEED1 052054053020000                 fcb             "RTS ", 0
2889
 00FFEED6 041042058020000                 fcb             "ABX ", 0
2890
 00FFEEDB 052054049020000                 fcb             "RTI ", 0
2891
 00FFEEE0 043057041049003                 fcb             "CWAI", IMMB
2892
 00FFEEE5 04D05504C020000                 fcb             "MUL ", 0
2893
 00FFEEEA 020020020020000                 fcb             "    ", 0
2894
 00FFEEEF 053057049020000                 fcb             "SWI ", 0
2895
 
2896
                                      ; 40 to 4F
2897
 00FFEEF4 04E045047041000                 fcb             "NEGA", 0
2898
 00FFEEF9 020020020020000                 fcb             "    ", 0
2899
 00FFEEFE 020020020020000                 fcb       "    ", 0
2900
 00FFEF03 04304F04D041000                 fcb             "COMA", 0
2901
 00FFEF08 04C053052041000                 fcb             "LSRA", 0
2902
 00FFEF0D 020020020020000                 fcb             "    ", 0
2903
 00FFEF12 05204F052041000                 fcb             "RORA", 0
2904
 00FFEF17 041053052041000                 fcb             "ASRA", 0
2905
 00FFEF1C 04105304C041000                 fcb             "ASLA", 0
2906
 00FFEF21 05204F04C041000                 fcb             "ROLA", 0
2907
 00FFEF26 044045043041000                 fcb             "DECA", 0
2908
 00FFEF2B 020020020020000                 fcb             "    ", 0
2909
 00FFEF30 04904E043041000                 fcb             "INCA", 0
2910
 00FFEF35 054053054041000                 fcb             "TSTA", 0
2911
 00FFEF3A 020020020020000                 fcb             "    ", 0
2912
 00FFEF3F 04304C052041000                 fcb             "CLRA", 0
2913
 
2914
                                      ; 50 to 5F
2915
 00FFEF44 04E045047042000                 fcb             "NEGB", 0
2916
 00FFEF49 020020020020000                 fcb             "    ", 0
2917
 00FFEF4E 020020020020000                 fcb       "    ", 0
2918
 00FFEF53 04304F04D042000                 fcb             "COMB", 0
2919
 00FFEF58 04C053052042000                 fcb             "LSRB", 0
2920
 00FFEF5D 020020020020000                 fcb             "    ", 0
2921
 00FFEF62 05204F052042000                 fcb             "RORB", 0
2922
 00FFEF67 041053052042000                 fcb             "ASRB", 0
2923
 00FFEF6C 04105304C042000                 fcb             "ASLB", 0
2924
 00FFEF71 05204F04C042000                 fcb             "ROLB", 0
2925
 00FFEF76 044045043042000                 fcb             "DECB", 0
2926
 00FFEF7B 020020020020000                 fcb             "    ", 0
2927
 00FFEF80 04904E043042000                 fcb             "INCB", 0
2928
 00FFEF85 054053054042000                 fcb             "TSTB", 0
2929
 00FFEF8A 020020020020000                 fcb             "    ", 0
2930
 00FFEF8F 04304C052042000                 fcb             "CLRB", 0
2931
 
2932
                                      ; 60 to 6F
2933
 00FFEF94 04E045047020005                 fcb             "NEG ", NDX
2934
 00FFEF99 020020020020000                 fcb             "    ", 0
2935
 00FFEF9E 020020020020000                 fcb       "    ", 0
2936
 00FFEFA3 04304F04D020005                 fcb             "COM ", NDX
2937
 00FFEFA8 04C053052020005                 fcb             "LSR ", NDX
2938
 00FFEFAD 020020020020000                 fcb             "    ", 0
2939
 00FFEFB2 05204F052020005                 fcb             "ROR ", NDX
2940
 00FFEFB7 041053052020005                 fcb             "ASR ", NDX
2941
 00FFEFBC 04105304C020005                 fcb             "ASL ", NDX
2942
 00FFEFC1 05204F04C020005                 fcb             "ROL ", NDX
2943
 00FFEFC6 044045043020005                 fcb             "DEC ", NDX
2944
 00FFEFCB 020020020020000                 fcb             "    ", 0
2945
 00FFEFD0 04904E043020005                 fcb             "INC ", NDX
2946
 00FFEFD5 054053054020005                 fcb             "TST ", NDX
2947
 00FFEFDA 04A04D050020005                 fcb             "JMP ", NDX
2948
 00FFEFDF 04304C052020005                 fcb             "CLR ", NDX
2949
 
2950
                                      ; 70 to 7F
2951
 00FFEFE4 04E045047020006                 fcb             "NEG ", EXT
2952
 00FFEFE9 020020020020000                 fcb             "    ", 0
2953
 00FFEFEE 020020020020000                 fcb       "    ", 0
2954
 00FFEFF3 04304F04D020006                 fcb             "COM ", EXT
2955
 00FFEFF8 04C053052020006                 fcb             "LSR ", EXT
2956
 00FFEFFD 020020020020000                 fcb             "    ", 0
2957
 00FFF002 05204F052020006                 fcb             "ROR ", EXT
2958
 00FFF007 041053052020006                 fcb             "ASR ", EXT
2959
 00FFF00C 04105304C020006                 fcb             "ASL ", EXT
2960
 00FFF011 05204F04C020006                 fcb             "ROL ", EXT
2961
 00FFF016 044045043020006                 fcb             "DEC ", EXT
2962
 00FFF01B 020020020020000                 fcb             "    ", 0
2963
 00FFF020 04904E043020006                 fcb             "INC ", EXT
2964
 00FFF025 054053054020006                 fcb             "TST ", EXT
2965
 00FFF02A 04A04D050020006                 fcb             "JMP ", EXT
2966
 00FFF02F 04304C052020006                 fcb             "CLR ", EXT
2967
 
2968
                                      ; 80 to 8F
2969
 00FFF034 053055042041003                 fcb             "SUBA", IMMB
2970
 00FFF039 04304D050041003                 fcb             "CMPA", IMMB
2971
 00FFF03E 053042043041003                 fcb             "SBCA", IMMB
2972
 00FFF043 053055042044007                 fcb             "SUBD", IMMW
2973
 00FFF048 04104E044041003                 fcb             "ANDA", IMMB
2974
 00FFF04D 042049054041003                 fcb             "BITA", IMMB
2975
 00FFF052 04C044041020003                 fcb             "LDA ", IMMB
2976
 00FFF057 020020020020000                 fcb             "    ", 0
2977
 00FFF05C 04504F052041003                 fcb             "EORA", IMMB
2978
 00FFF061 041044043041003                 fcb             "ADCA", IMMB
2979
 00FFF066 04F052041020003                 fcb             "ORA ", IMMB
2980
 00FFF06B 041044044041003                 fcb             "ADDA", IMMB
2981
 00FFF070 04304D050058007                 fcb             "CMPX", IMMW
2982
 00FFF075 042053052020004                 fcb             "BSR ", SREL
2983
 00FFF07A 04C044058020007                 fcb             "LDX ", IMMW
2984
 00FFF07F 04A04D046020008                 fcb             "JMF ", FAREXT
2985
 
2986
                                      ; 90 to 9F
2987
 00FFF084 053055042041001                 fcb             "SUBA", DIRECT
2988
 00FFF089 04304D050041001                 fcb             "CMPA", DIRECT
2989
 00FFF08E 053042043041001                 fcb             "SBCA", DIRECT
2990
 00FFF093 053055042044001                 fcb             "SUBD", DIRECT
2991
 00FFF098 04104E044041001                 fcb             "ANDA", DIRECT
2992
 00FFF09D 042049054041001                 fcb             "BITA", DIRECT
2993
 00FFF0A2 04C044041020001                 fcb             "LDA ", DIRECT
2994
 00FFF0A7 053054041020001                 fcb             "STA ", DIRECT
2995
 00FFF0AC 04504F052041001                 fcb             "EORA", DIRECT
2996
 00FFF0B1 041044043041001                 fcb             "ADCA", DIRECT
2997
 00FFF0B6 04F052041020001                 fcb             "ORA ", DIRECT
2998
 00FFF0BB 041044044041001                 fcb             "ADDA", DIRECT
2999
 00FFF0C0 04304D050058001                 fcb             "CMPX", DIRECT
3000
 00FFF0C5 04A053052020001                 fcb             "JSR ", DIRECT
3001
 00FFF0CA 04C044058020001                 fcb             "LDX ", DIRECT
3002
 00FFF0CF 053054058020001                 fcb             "STX ", DIRECT
3003
 
3004
                                      ; A0 to AF
3005
 00FFF0D4 053055042041005                 fcb             "SUBA", NDX
3006
 00FFF0D9 04304D050041005                 fcb             "CMPA", NDX
3007
 00FFF0DE 053042043041005                 fcb             "SBCA", NDX
3008
 00FFF0E3 053055042044005                 fcb             "SUBD", NDX
3009
 00FFF0E8 04104E044041005                 fcb             "ANDA", NDX
3010
 00FFF0ED 042049054041005                 fcb             "BITA", NDX
3011
 00FFF0F2 04C044041020005                 fcb             "LDA ", NDX
3012
 00FFF0F7 053054041020005                 fcb             "STA ", NDX
3013
 00FFF0FC 04504F052041005                 fcb             "EORA", NDX
3014
 00FFF101 041044043041005                 fcb             "ADCA", NDX
3015
 00FFF106 04F052041020005                 fcb             "ORA ", NDX
3016
 00FFF10B 041044044041005                 fcb             "ADDA", NDX
3017
 00FFF110 04304D050058005                 fcb             "CMPX", NDX
3018
 00FFF115 04A053052020005                 fcb             "JSR ", NDX
3019
 00FFF11A 04C044058020005                 fcb             "LDX ", NDX
3020
 00FFF11F 053054058020005                 fcb             "STX ", NDX
3021
 
3022
                                      ; B0 to BF
3023
 00FFF124 053055042041006                 fcb             "SUBA", EXT
3024
 00FFF129 04304D050041006                 fcb             "CMPA", EXT
3025
 00FFF12E 053042043041006                 fcb             "SBCA", EXT
3026
 00FFF133 053055042044006                 fcb             "SUBD", EXT
3027
 00FFF138 04104E044041006                 fcb             "ANDA", EXT
3028
 00FFF13D 042049054041006                 fcb             "BITA", EXT
3029
 00FFF142 04C044041020006                 fcb             "LDA ", EXT
3030
 00FFF147 053054041020006                 fcb             "STA ", EXT
3031
 00FFF14C 04504F052041006                 fcb             "EORA", EXT
3032
 00FFF151 041044043041006                 fcb             "ADCA", EXT
3033
 00FFF156 04F052041020006                 fcb             "ORA ", EXT
3034
 00FFF15B 041044044041006                 fcb             "ADDA", EXT
3035
 00FFF160 04304D050058006                 fcb             "CMPX", EXT
3036
 00FFF165 04A053052020006                 fcb             "JSR ", EXT
3037
 00FFF16A 04C044058020006                 fcb             "LDX ", EXT
3038
 00FFF16F 053054058020006                 fcb             "STX ", EXT
3039
 
3040
                                      ; C0 to CF
3041
 00FFF174 053055042042003                 fcb             "SUBB", IMMB
3042
 00FFF179 04304D050042003                 fcb             "CMPB", IMMB
3043
 00FFF17E 053042043062003                 fcb             "SBCb", IMMB
3044
 00FFF183 041044044044007                 fcb             "ADDD", IMMW
3045
 00FFF188 04104E044042003                 fcb             "ANDB", IMMB
3046
 00FFF18D 042049054042003                 fcb             "BITB", IMMB
3047
 00FFF192 04C044042020003                 fcb             "LDB ", IMMB
3048
 00FFF197 020020020020000                 fcb             "    ", 0
3049
 00FFF19C 04504F052042003                 fcb             "EORB", IMMB
3050
 00FFF1A1 041044043042003                 fcb             "ADCB", IMMB
3051
 00FFF1A6 04F052042020003                 fcb             "ORB ", IMMB
3052
 00FFF1AB 041044044042003                 fcb             "ADDB", IMMB
3053
 00FFF1B0 04C044044020007                 fcb             "LDD ", IMMW
3054
 00FFF1B5 020020020020004                 fcb             "    ", SREL
3055
 00FFF1BA 04C044055020007                 fcb             "LDU ", IMMW
3056
 00FFF1BF 04A053046020008                 fcb             "JSF ", FAREXT
3057
 
3058
                                      ; D0 to DF
3059
 00FFF1C4 053055042042001                 fcb             "SUBB", DIRECT
3060
 00FFF1C9 04304D050042001                 fcb             "CMPB", DIRECT
3061
 00FFF1CE 053042043042001                 fcb             "SBCB", DIRECT
3062
 00FFF1D3 041044044044001                 fcb             "ADDD", DIRECT
3063
 00FFF1D8 04104E044042001                 fcb             "ANDB", DIRECT
3064
 00FFF1DD 042049054042001                 fcb             "BITB", DIRECT
3065
 00FFF1E2 04C044042020001                 fcb             "LDB ", DIRECT
3066
 00FFF1E7 053054042020001                 fcb             "STB ", DIRECT
3067
 00FFF1EC 04504F052042001                 fcb             "EORB", DIRECT
3068
 00FFF1F1 041044043042001                 fcb             "ADCB", DIRECT
3069
 00FFF1F6 04F052042020001                 fcb             "ORB ", DIRECT
3070
 00FFF1FB 041044044042001                 fcb             "ADDB", DIRECT
3071
 00FFF200 04C044044020001                 fcb             "LDD ", DIRECT
3072
 00FFF205 053054044020001                 fcb             "STD ", DIRECT
3073
 00FFF20A 04C044055020001                 fcb             "LDU ", DIRECT
3074
 00FFF20F 053054055020001                 fcb             "STU ", DIRECT
3075
 
3076
                                      ; E0 to EF
3077
 00FFF214 053055042042005                 fcb             "SUBB", NDX
3078
 00FFF219 04304D050042005                 fcb             "CMPB", NDX
3079
 00FFF21E 053042043042005                 fcb             "SBCB", NDX
3080
 00FFF223 041044044044005                 fcb             "ADDD", NDX
3081
 00FFF228 04104E044042005                 fcb             "ANDB", NDX
3082
 00FFF22D 042049054042005                 fcb             "BITB", NDX
3083
 00FFF232 04C044042020005                 fcb             "LDB ", NDX
3084
 00FFF237 053054042020005                 fcb             "STB ", NDX
3085
 00FFF23C 04504F052042005                 fcb             "EORB", NDX
3086
 00FFF241 041044043042005                 fcb             "ADCB", NDX
3087
 00FFF246 04F052042020005                 fcb             "ORB ", NDX
3088
 00FFF24B 041044044042005                 fcb             "ADDB", NDX
3089
 00FFF250 04C044044020005                 fcb             "LDD ", NDX
3090
 00FFF255 053054044020005                 fcb             "STD ", NDX
3091
 00FFF25A 04C044055020005                 fcb             "LDU ", NDX
3092
 00FFF25F 053054055020005                 fcb             "STU ", NDX
3093
 
3094
                                      ; F0 to FF
3095
 00FFF264 053055042042006                 fcb             "SUBB", EXT
3096
 00FFF269 04304D050042006                 fcb             "CMPB", EXT
3097
 00FFF26E 053042043042006                 fcb             "SBCB", EXT
3098
 00FFF273 041044044044006                 fcb             "ADDD", EXT
3099
 00FFF278 04104E044042006                 fcb             "ANDB", EXT
3100
 00FFF27D 042049054042006                 fcb             "BITB", EXT
3101
 00FFF282 04C044042020006                 fcb             "LDB ", EXT
3102
 00FFF287 053054042020006                 fcb             "STB ", EXT
3103
 00FFF28C 04504F052042006                 fcb             "EORB", EXT
3104
 00FFF291 041044043042006                 fcb             "ADCB", EXT
3105
 00FFF296 04F052042020006                 fcb             "ORB ", EXT
3106
 00FFF29B 041044044042006                 fcb             "ADDB", EXT
3107
 00FFF2A0 04C044044020006                 fcb             "LDD ", EXT
3108
 00FFF2A5 053054044020006                 fcb             "STD ", EXT
3109
 00FFF2AA 04C044055020006                 fcb             "LDU ", EXT
3110
 00FFF2AF 053054055020006                 fcb             "STU ", EXT
3111
 
3112
                                      ; 120 to 12F
3113
                              distbl2:
3114
 00FFF2B4 04C042052041                    fcb             "LBRA"
3115
 00FFF2B8 04C04205204E                    fcb             "LBRN"
3116
 00FFF2BC 04C042048049                    fcb             "LBHI"
3117
 00FFF2C0 04C04204C053                    fcb             "LBLS"
3118
 00FFF2C4 04C042048053                    fcb             "LBHS"
3119
 00FFF2C8 04C04204C04F                    fcb             "LBLO"
3120
 00FFF2CC 04C04204E045                    fcb             "LBNE"
3121
 00FFF2D0 04C042045051                    fcb             "LBEQ"
3122
 00FFF2D4 04C042056043                    fcb             "LBVC"
3123
 00FFF2D8 04C042056053                    fcb             "LBVS"
3124
 00FFF2DC 04C04205004C                    fcb             "LBPL"
3125
 00FFF2E0 04C04204D049                    fcb             "LBMI"
3126
 00FFF2E4 04C042047045                    fcb             "LBGE"
3127
 00FFF2E8 04C04204C054                    fcb             "LBLT"
3128
 00FFF2EC 04C042047054                    fcb             "LBGT"
3129
 00FFF2F0 04C04204C045                    fcb             "LBLE"
3130
 
3131
                              distbl3:
3132
 00FFF2F4 13F                             fcb             $13F
3133
 00FFF2F5 183                             fcb             $183
3134
 00FFF2F6 18C                             fcb             $18C
3135
 00FFF2F7 18E                             fcb             $18E
3136
 00FFF2F8 193                             fcb             $193
3137
 00FFF2F9 19C                             fcb             $19C
3138
 00FFF2FA 19E                             fcb             $19E
3139
 00FFF2FB 19F                             fcb             $19F
3140
 00FFF2FC 1A3                             fcb             $1A3
3141
 00FFF2FD 1AC                             fcb             $1AC
3142
 00FFF2FE 1AE                             fcb             $1AE
3143
 00FFF2FF 1AF                             fcb             $1AF
3144
 00FFF300 1B3                             fcb             $1B3
3145
 00FFF301 1BC                             fcb             $1BC
3146
 00FFF302 1BE                             fcb             $1BE
3147
 00FFF303 1BF                             fcb             $1BF
3148
 00FFF304 1CE                             fcb             $1CE
3149
 00FFF305 1DE                             fcb             $1DE
3150
 00FFF306 1DF                             fcb             $1DF
3151
 00FFF307 1EE                             fcb             $1EE
3152
 00FFF308 1EF                             fcb             $1EF
3153
 00FFF309 1FE                             fcb             $1FE
3154
 00FFF30A 1FF                             fcb             $1FF
3155
 00FFF30B 23F                             fcb             $23F
3156
 00FFF30C 283                             fcb             $283
3157
 00FFF30D 28C                             fcb             $28C
3158
 00FFF30E 293                             fcb             $293
3159
 00FFF30F 29C                             fcb             $29C
3160
 00FFF310 2A3                             fcb             $2A3
3161
 00FFF311 2AC                             fcb             $2AC
3162
 00FFF312 2B3                             fcb             $2B3
3163
 00FFF313 2BC                             fcb             $2BC
3164
 
3165
                              distbl4:
3166
 00FFF314 053057049032000                 fcb             "SWI2", 0
3167
 00FFF319 04304D050044007                 fcb             "CMPD", IMMW
3168
 00FFF31E 04304D050059007                 fcb             "CMPY", IMMW
3169
 00FFF323 04C044059020007                 fcb             "LDY ", IMMW
3170
 00FFF328 04304D050044001                 fcb             "CMPD", DIRECT
3171
 00FFF32D 04304D050059001                 fcb             "CMPY", DIRECT
3172
 00FFF332 04C044059020001                 fcb             "LDY ", DIRECT
3173
 00FFF337 053054059020001                 fcb             "STY ", DIRECT
3174
 00FFF33C 04304D050044005                 fcb             "CMPD", NDX
3175
 00FFF341 04304D050059005                 fcb             "CMPY", NDX
3176
 00FFF346 04C044059020005                 fcb             "LDY ", NDX
3177
 00FFF34B 053054059020005                 fcb             "STY ", NDX
3178
 00FFF350 04304D050044006                 fcb             "CMPD", EXT
3179
 00FFF355 04304D050059006                 fcb             "CMPY", EXT
3180
 00FFF35A 04C044059020006                 fcb             "LDY ", EXT
3181
 00FFF35F 053054059020006                 fcb             "STY ", EXT
3182
 00FFF364 04C044053020007                 fcb             "LDS ", IMMW
3183
 00FFF369 04C044053020001                 fcb             "LDS ", DIRECT
3184
 00FFF36E 053054053020001                 fcb             "STS ", DIRECT
3185
 00FFF373 04C044053020005                 fcb             "LDS ", NDX
3186
 00FFF378 053054053020005                 fcb             "STS ", NDX
3187
 00FFF37D 04C044053020006                 fcb             "LDS ", EXT
3188
 00FFF382 053054053020006                 fcb             "STS ", EXT
3189
 00FFF387 053057049033000                 fcb             "SWI3", 0
3190
 00FFF38C 04304D050055007                 fcb             "CMPU", IMMW
3191
 00FFF391 04304D050053007                 fcb             "CMPS", IMMW
3192
 00FFF396 04304D050055001                 fcb             "CMPU", DIRECT
3193
 00FFF39B 04304D050053001                 fcb             "CMPS", DIRECT
3194
 00FFF3A0 04304D050055005                 fcb             "CMPU", NDX
3195
 00FFF3A5 04304D050053005                 fcb             "CMPS", NDX
3196
 00FFF3AA 04304D050055006                 fcb             "CMPU", EXT
3197
 00FFF3AF 04304D050053006                 fcb             "CMPS", EXT
3198
 
3199
                              disassem:
3200 14 robfinch
 00FFF3B4 00F15F                          clr             farflag
3201
 00FFF3B6 0170006AD                       lbsr    GetRange
3202
 00FFF3B9 017FFDD16                       lbsr    CRLF
3203 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3204 14 robfinch
 00FFF3BC 1BE000922                       ldy             mon_r1+2
3205 13 robfinch
                              disLoop1:
3206 14 robfinch
 00FFF3BF 01F020                          tfr             y,d
3207
 00FFF3C1 017FFF03D                       lbsr    DispWordAsHex
3208 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3209 14 robfinch
 00FFF3C4 0C6020                          ldb             #' '
3210
 00FFF3C6 017FFF949                       lbsr    OUTCH
3211 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3212 14 robfinch
 00FFF3C9 0E6A00                          ldb             ,y+
3213
 00FFF3CB 0C5300                          bitb    #$300
3214
 00FFF3CD 12600041F                       lbne    dis1
3215
 00FFF3D0 0C40FF                          andb    #$FF                    ; mask off extra bits
3216
 00FFF3D2 0C1015                          cmpb    #$15
3217
 00FFF3D4 026004                          bne             dis20
3218
 00FFF3D6 0D715F                          stb             farflag
3219
 00FFF3D8 020FE5                          bra             disLoop1
3220 13 robfinch
                              dis20:
3221 14 robfinch
 00FFF3DA 08EFFEDB4                       ldx             #distbl1
3222 13 robfinch
                              dis23:
3223 14 robfinch
 00FFF3DD 086005                          lda             #5
3224
 00FFF3DF 03D                             mul
3225
 00FFF3E0 03A                             abx
3226
 00FFF3E1 0E6800                          ldb             ,x+
3227
 00FFF3E3 017FFF92C                       lbsr    OUTCH
3228 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3229 14 robfinch
 00FFF3E6 0E6800                          ldb             ,x+
3230
 00FFF3E8 017FFF927                       lbsr    OUTCH
3231 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3232 14 robfinch
 00FFF3EB 0E6800                          ldb             ,x+
3233
 00FFF3ED 017FFF922                       lbsr    OUTCH
3234 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3235 14 robfinch
 00FFF3F0 0E6800                          ldb             ,x+
3236
 00FFF3F2 017FFF91D                       lbsr    OUTCH
3237 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3238 14 robfinch
 00FFF3F5 0C6020                          ldb             #' '
3239
 00FFF3F7 017FFF918                       lbsr    OUTCH
3240 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3241 14 robfinch
 00FFF3FA 0E6800                          ldb             ,x+
3242
 00FFF3FC 127000443                       lbeq    disNextLine
3243
 00FFF3FF 0C1001                          cmpb    #DIRECT
3244
 00FFF401 026008                          bne             disNotDirect
3245
 00FFF403 0E6A00                          ldb             ,y+
3246
 00FFF405 017FFF002                       lbsr    DispByteAsHex
3247 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3248 14 robfinch
 00FFF408 016000437                       lbra    disNextLine
3249 13 robfinch
                              disNotDirect:
3250 14 robfinch
 00FFF40B 0C1002                          cmpb    #LSREL
3251
 00FFF40D 02600C                          bne             disNotLRel
3252 13 robfinch
                              dis21:
3253 14 robfinch
 00FFF40F 0ECA01                          ldd             ,y++
3254 13 robfinch
                              dis2:
3255 14 robfinch
 00FFF411 030A0B                          leax    d,y
3256
 00FFF413 01F010                          tfr             x,d
3257
 00FFF415 017FFEFE9                       lbsr    DispWordAsHex
3258 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3259 14 robfinch
 00FFF418 016000427                       lbra    disNextLine
3260 13 robfinch
                              disNotLRel:
3261 14 robfinch
 00FFF41B 0C1004                          cmpb    #SREL
3262
 00FFF41D 026005                          bne             disNotRel
3263
 00FFF41F 0E6A00                          ldb             ,y+
3264
 00FFF421 04F                             clra
3265
 00FFF422 020FED                          bra             dis2
3266 13 robfinch
                              disNotRel:
3267 14 robfinch
 00FFF424 0C1005                          cmpb    #NDX
3268
 00FFF426 026385                          bne             disNotNdx
3269
 00FFF428 0E6A00                          ldb             ,y+
3270
 00FFF42A 0C5800                          bitb    #$800
3271
 00FFF42C 02601E                          bne             disNot9                 ; test for offset 9 mode
3272
 00FFF42E 034004                          pshs    b
3273
 00FFF430 0C41FF                          andb    #$1FF                           ; mask to offset bits
3274
 00FFF432 04F                             clra                                                    ;
3275
 00FFF433 0C5100                          bitb    #$100                           ; test for negative offset
3276
 00FFF435 027003                          beq             dis3
3277
 00FFF437 04A                             deca                                                    ; sign extend offset
3278
 00FFF438 0CAE00                          orb             #$E00
3279 13 robfinch
                              dis3:
3280 14 robfinch
 00FFF43A 017FFEFC4                       lbsr    DispWordAsHex
3281 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3282 14 robfinch
 00FFF43D 0C602C                          ldb             #','
3283
 00FFF43F 017FFF8D0                       lbsr    OUTCH
3284 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3285 14 robfinch
 00FFF442 035004                          puls    b
3286
 00FFF444 08D42E                          bsr             disNdxReg
3287
 00FFF446 017FFF8C9                       lbsr    OUTCH
3288 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3289 14 robfinch
 00FFF449 0160003F6                       lbra    disNextLine
3290 13 robfinch
                              disNot9:
3291 14 robfinch
 00FFF44C 034004                          pshs    b
3292
 00FFF44E 0C5100                          bitb    #$100                   ; check if indirect
3293
 00FFF450 027005                          beq             dis4
3294
 00FFF452 0C605B                          ldb             #'['
3295
 00FFF454 017FFF8BB                       lbsr    OUTCH
3296 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3297
                              dis4:
3298 14 robfinch
 00FFF457 0E6E04                          ldb             ,s                              ; get back b
3299
 00FFF459 0C400F                          andb    #15
3300
 00FFF45B 026030                          bne             disNotRplus
3301
 00FFF45D 0E6E04                          ldb             ,s
3302
 00FFF45F 0C5080                          bitb    #$80                    ; outer indexed?
3303
 00FFF461 027005                          beq             dis5
3304
 00FFF463 0C605D                          ldb             #']'
3305
 00FFF465 017FFF8AA                       lbsr    OUTCH
3306 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3307
                              dis5:
3308 14 robfinch
 00FFF468 0C602C                          ldb             #','
3309
 00FFF46A 017FFF8A5                       lbsr    OUTCH
3310 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3311 14 robfinch
 00FFF46D 0E6E04                          ldb             ,s
3312
 00FFF46F 08D403                          bsr             disNdxReg
3313
 00FFF471 017FFF89E                       lbsr    OUTCH
3314 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3315 14 robfinch
 00FFF474 0C602B                          ldb             #'+'
3316
 00FFF476 017FFF899                       lbsr    OUTCH
3317 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3318 14 robfinch
 00FFF479 035004                          puls    b
3319
 00FFF47B 0C5100                          bitb    #$100
3320
 00FFF47D 1270003C2                       lbeq    disNextLine
3321
 00FFF480 0C5080                          bitb    #$80
3322
 00FFF482 1260003BD                       lbne    disNextLine
3323
 00FFF485 0C605D                          ldb             #']'
3324
 00FFF487 017FFF888                       lbsr    OUTCH
3325 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3326 14 robfinch
 00FFF48A 0160003B5                       lbra    disNextLine
3327 13 robfinch
                              disNotRplus:
3328 14 robfinch
 00FFF48D 0C1001                          cmpb    #1
3329
 00FFF48F 026033                          bne             disNotRplusplus
3330
 00FFF491 0E6E04                          ldb             ,s
3331
 00FFF493 0C5080                          bitb    #$80                    ; outer indexed?
3332
 00FFF495 027005                          beq             dis6
3333
 00FFF497 0C605D                          ldb             #']'
3334
 00FFF499 017FFF876                       lbsr    OUTCH
3335 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3336
                              dis6:
3337 14 robfinch
 00FFF49C 0C602C                          ldb             #','
3338
 00FFF49E 017FFF871                       lbsr    OUTCH
3339 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3340 14 robfinch
 00FFF4A1 0E6E04                          ldb             ,s
3341
 00FFF4A3 08D3CF                          bsr             disNdxReg
3342
 00FFF4A5 017FFF86A                       lbsr    OUTCH
3343 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3344 14 robfinch
 00FFF4A8 0C602B                          ldb             #'+'
3345
 00FFF4AA 017FFF865                       lbsr    OUTCH
3346 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3347 14 robfinch
 00FFF4AD 017FFF862                       lbsr    OUTCH
3348 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3349 14 robfinch
 00FFF4B0 035004                          puls    b
3350
 00FFF4B2 0C5100                          bitb    #$100
3351
 00FFF4B4 12700038B                       lbeq    disNextLine
3352
 00FFF4B7 0C5080                          bitb    #$80
3353
 00FFF4B9 126000386                       lbne    disNextLine
3354
 00FFF4BC 0C605D                          ldb             #']'
3355
 00FFF4BE 017FFF851                       lbsr    OUTCH
3356 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3357 14 robfinch
 00FFF4C1 01600037E                       lbra    disNextLine
3358 13 robfinch
                              disNotRplusplus:
3359 14 robfinch
 00FFF4C4 0C1002                          cmpb    #2
3360
 00FFF4C6 026030                          bne             disNotRminus
3361
 00FFF4C8 0E6E04                          ldb             ,s
3362
 00FFF4CA 0C5080                          bitb    #$80                    ; outer indexed?
3363
 00FFF4CC 027005                          beq             dis7
3364
 00FFF4CE 0C605D                          ldb             #']'
3365
 00FFF4D0 017FFF83F                       lbsr    OUTCH
3366 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3367
                              dis7:
3368 14 robfinch
 00FFF4D3 0C602C                          ldb             #','
3369
 00FFF4D5 017FFF83A                       lbsr    OUTCH
3370 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3371 14 robfinch
 00FFF4D8 0E6E04                          ldb             ,s
3372
 00FFF4DA 08D398                          bsr             disNdxReg
3373
 00FFF4DC 017FFF833                       lbsr    OUTCH
3374 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3375 14 robfinch
 00FFF4DF 0C602D                          ldb             #'-'
3376
 00FFF4E1 017FFF82E                       lbsr    OUTCH
3377 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3378 14 robfinch
 00FFF4E4 035004                          puls    b
3379
 00FFF4E6 0C5100                          bitb    #$100
3380
 00FFF4E8 127000357                       lbeq    disNextLine
3381
 00FFF4EB 0C5080                          bitb    #$80
3382
 00FFF4ED 126000352                       lbne    disNextLine
3383
 00FFF4F0 0C605D                          ldb             #']'
3384
 00FFF4F2 017FFF81D                       lbsr    OUTCH
3385 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3386 14 robfinch
 00FFF4F5 01600034A                       lbra    disNextLine
3387 13 robfinch
                              disNotRminus:
3388 14 robfinch
 00FFF4F8 0C1003                          cmpb    #3
3389
 00FFF4FA 026033                          bne             disNotRminusminus
3390
 00FFF4FC 0E6E04                          ldb             ,s
3391
 00FFF4FE 0C5080                          bitb    #$80                    ; outer indexed?
3392
 00FFF500 027005                          beq             dis8
3393
 00FFF502 0C605D                          ldb             #']'
3394
 00FFF504 017FFF80B                       lbsr    OUTCH
3395 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3396
                              dis8:
3397 14 robfinch
 00FFF507 0C602C                          ldb             #','
3398
 00FFF509 017FFF806                       lbsr    OUTCH
3399 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3400 14 robfinch
 00FFF50C 0E6E04                          ldb             ,s
3401
 00FFF50E 08D364                          bsr             disNdxReg
3402
 00FFF510 017FFF7FF                       lbsr    OUTCH
3403 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3404 14 robfinch
 00FFF513 0C602D                          ldb             #'-'
3405
 00FFF515 017FFF7FA                       lbsr    OUTCH
3406 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3407 14 robfinch
 00FFF518 017FFF7F7                       lbsr    OUTCH
3408 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3409 14 robfinch
 00FFF51B 035004                          puls    b
3410
 00FFF51D 0C5100                          bitb    #$100
3411
 00FFF51F 127000320                       lbeq    disNextLine
3412
 00FFF522 0C5080                          bitb    #$80
3413
 00FFF524 12600031B                       lbne    disNextLine
3414
 00FFF527 0C605D                          ldb             #']'
3415
 00FFF529 017FFF7E6                       lbsr    OUTCH
3416 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3417 14 robfinch
 00FFF52C 016000313                       lbra    disNextLine
3418 13 robfinch
                              disNotRminusminus:
3419 14 robfinch
 00FFF52F 0C1004                          cmpb    #4
3420
 00FFF531 02602B                          bne             disNotR
3421
 00FFF533 0E6E04                          ldb             ,s
3422
 00FFF535 0C5080                          bitb    #$80                    ; outer indexed?
3423
 00FFF537 027005                          beq             dis9
3424
 00FFF539 0C605D                          ldb             #']'
3425
 00FFF53B 017FFF7D4                       lbsr    OUTCH
3426 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3427
                              dis9:
3428 14 robfinch
 00FFF53E 0C602C                          ldb             #','
3429
 00FFF540 017FFF7CF                       lbsr    OUTCH
3430 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3431 14 robfinch
 00FFF543 0E6E04                          ldb             ,s
3432
 00FFF545 08D32D                          bsr             disNdxReg
3433
 00FFF547 017FFF7C8                       lbsr    OUTCH
3434 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3435 14 robfinch
 00FFF54A 035004                          puls    b
3436
 00FFF54C 0C5100                          bitb    #$100
3437
 00FFF54E 1270002F1                       lbeq    disNextLine
3438
 00FFF551 0C5080                          bitb    #$80
3439
 00FFF553 1260002EC                       lbne    disNextLine
3440
 00FFF556 0C605D                          ldb             #']'
3441
 00FFF558 017FFF7B7                       lbsr    OUTCH
3442 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3443 14 robfinch
 00FFF55B 0160002E4                       lbra    disNextLine
3444 13 robfinch
                              disNotR:
3445 14 robfinch
 00FFF55E 0C1005                          cmpb    #5
3446
 00FFF560 026038                          bne             disNotBOffs
3447
 00FFF562 0C6042                          ldb             #'B'
3448
 00FFF564 017FFF7AB                       lbsr    OUTCH
3449 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3450 14 robfinch
 00FFF567 0E6E04                          ldb             ,s
3451
 00FFF569 0C5080                          bitb    #$80                    ; outer indexed?
3452
 00FFF56B 027005                          beq             dis10
3453
 00FFF56D 0C605D                          ldb             #']'
3454
 00FFF56F 017FFF7A0                       lbsr    OUTCH
3455 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3456
                              dis10:
3457 14 robfinch
 00FFF572 0C602C                          ldb             #','
3458
 00FFF574 017FFF79B                       lbsr    OUTCH
3459 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3460 14 robfinch
 00FFF577 0E6E04                          ldb             ,s
3461
 00FFF579 08D2F9                          bsr             disNdxReg
3462
 00FFF57B 017FFF794                       lbsr    OUTCH
3463 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3464 14 robfinch
 00FFF57E 0C602D                          ldb             #'-'
3465
 00FFF580 017FFF78F                       lbsr    OUTCH
3466 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3467 14 robfinch
 00FFF583 017FFF78C                       lbsr    OUTCH
3468 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3469 14 robfinch
 00FFF586 035004                          puls    b
3470
 00FFF588 0C5100                          bitb    #$100
3471
 00FFF58A 1270002B5                       lbeq    disNextLine
3472
 00FFF58D 0C5080                          bitb    #$80
3473
 00FFF58F 1260002B0                       lbne    disNextLine
3474
 00FFF592 0C605D                          ldb             #']'
3475
 00FFF594 017FFF77B                       lbsr    OUTCH
3476 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3477 14 robfinch
 00FFF597 0160002A8                       lbra    disNextLine
3478 13 robfinch
                              disNotBOffs:
3479 14 robfinch
 00FFF59A 0C1006                          cmpb    #6
3480
 00FFF59C 026038                          bne             disNotAOffs
3481
 00FFF59E 0C6041                          ldb             #'A'
3482
 00FFF5A0 017FFF76F                       lbsr    OUTCH
3483 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3484 14 robfinch
 00FFF5A3 0E6E04                          ldb             ,s
3485
 00FFF5A5 0C5080                          bitb    #$80                    ; outer indexed?
3486
 00FFF5A7 027005                          beq             dis11
3487
 00FFF5A9 0C605D                          ldb             #']'
3488
 00FFF5AB 017FFF764                       lbsr    OUTCH
3489 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3490
                              dis11:
3491 14 robfinch
 00FFF5AE 0C602C                          ldb             #','
3492
 00FFF5B0 017FFF75F                       lbsr    OUTCH
3493 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3494 14 robfinch
 00FFF5B3 0E6E04                          ldb             ,s
3495
 00FFF5B5 08D2BD                          bsr             disNdxReg
3496
 00FFF5B7 017FFF758                       lbsr    OUTCH
3497 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3498 14 robfinch
 00FFF5BA 0C602D                          ldb             #'-'
3499
 00FFF5BC 017FFF753                       lbsr    OUTCH
3500 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3501 14 robfinch
 00FFF5BF 017FFF750                       lbsr    OUTCH
3502 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3503 14 robfinch
 00FFF5C2 035004                          puls    b
3504
 00FFF5C4 0C5100                          bitb    #$100
3505
 00FFF5C6 127000279                       lbeq    disNextLine
3506
 00FFF5C9 0C5080                          bitb    #$80
3507
 00FFF5CB 126000274                       lbne    disNextLine
3508
 00FFF5CE 0C605D                          ldb             #']'
3509
 00FFF5D0 017FFF73F                       lbsr    OUTCH
3510 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3511 14 robfinch
 00FFF5D3 01600026C                       lbra    disNextLine
3512 13 robfinch
                              disNotAOffs:
3513 14 robfinch
 00FFF5D6 0C1008                          cmpb    #8
3514
 00FFF5D8 026039                          bne             disNotBO
3515
 00FFF5DA 0E6A00                          ldb             ,y+
3516
 00FFF5DC 01D                             sex
3517
 00FFF5DD 017FFEE21                       lbsr    DispWordAsHex
3518 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3519 14 robfinch
 00FFF5E0 0E6E04                          ldb             ,s
3520
 00FFF5E2 0C5080                          bitb    #$80                    ; outer indexed?
3521
 00FFF5E4 027005                          beq             dis12
3522
 00FFF5E6 0C605D                          ldb             #']'
3523
 00FFF5E8 017FFF727                       lbsr    OUTCH
3524 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3525
                              dis12:
3526 14 robfinch
 00FFF5EB 0C602C                          ldb             #','
3527
 00FFF5ED 017FFF722                       lbsr    OUTCH
3528 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3529 14 robfinch
 00FFF5F0 0E6E04                          ldb             ,s
3530
 00FFF5F2 08D280                          bsr             disNdxReg
3531
 00FFF5F4 017FFF71B                       lbsr    OUTCH
3532 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3533 14 robfinch
 00FFF5F7 0C602D                          ldb             #'-'
3534
 00FFF5F9 017FFF716                       lbsr    OUTCH
3535 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3536 14 robfinch
 00FFF5FC 017FFF713                       lbsr    OUTCH
3537 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3538 14 robfinch
 00FFF5FF 035004                          puls    b
3539
 00FFF601 0C5100                          bitb    #$100
3540
 00FFF603 12700023C                       lbeq    disNextLine
3541
 00FFF606 0C5080                          bitb    #$80
3542
 00FFF608 126000237                       lbne    disNextLine
3543
 00FFF60B 0C605D                          ldb             #']'
3544
 00FFF60D 017FFF702                       lbsr    OUTCH
3545 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3546 14 robfinch
 00FFF610 01600022F                       lbra    disNextLine
3547 13 robfinch
                              disNotBO:
3548 14 robfinch
 00FFF613 0C1009                          cmpb    #9
3549
 00FFF615 026038                          bne             disNotWO
3550
 00FFF617 0ECA01                          ldd             ,y++
3551
 00FFF619 017FFEDE5                       lbsr    DispWordAsHex
3552 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3553 14 robfinch
 00FFF61C 0E6E04                          ldb             ,s
3554
 00FFF61E 0C5080                          bitb    #$80                    ; outer indexed?
3555
 00FFF620 027005                          beq             dis13
3556
 00FFF622 0C605D                          ldb             #']'
3557
 00FFF624 017FFF6EB                       lbsr    OUTCH
3558 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3559
                              dis13:
3560 14 robfinch
 00FFF627 0C602C                          ldb             #','
3561
 00FFF629 017FFF6E6                       lbsr    OUTCH
3562 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3563 14 robfinch
 00FFF62C 0E6E04                          ldb             ,s
3564
 00FFF62E 08D244                          bsr             disNdxReg
3565
 00FFF630 017FFF6DF                       lbsr    OUTCH
3566 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3567 14 robfinch
 00FFF633 0C602D                          ldb             #'-'
3568
 00FFF635 017FFF6DA                       lbsr    OUTCH
3569 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3570 14 robfinch
 00FFF638 017FFF6D7                       lbsr    OUTCH
3571 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3572 14 robfinch
 00FFF63B 035004                          puls    b
3573
 00FFF63D 0C5100                          bitb    #$100
3574
 00FFF63F 127000200                       lbeq    disNextLine
3575
 00FFF642 0C5080                          bitb    #$80
3576
 00FFF644 1260001FB                       lbne    disNextLine
3577
 00FFF647 0C605D                          ldb             #']'
3578
 00FFF649 017FFF6C6                       lbsr    OUTCH
3579 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3580 14 robfinch
 00FFF64C 0160001F3                       lbra    disNextLine
3581 13 robfinch
                              disNotWO:
3582 14 robfinch
 00FFF64F 0C100A                          cmpb    #10
3583
 00FFF651 02603D                          bne             disNotTO
3584
 00FFF653 0E6A01                          ldb             ,y++
3585
 00FFF655 017FFEDB2                       lbsr    DispByteAsHex
3586 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3587 14 robfinch
 00FFF658 0ECA01                          ldd             ,y++
3588
 00FFF65A 017FFEDA4                       lbsr    DispWordAsHex
3589 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3590 14 robfinch
 00FFF65D 0E6E04                          ldb             ,s
3591
 00FFF65F 0C5080                          bitb    #$80                    ; outer indexed?
3592
 00FFF661 027005                          beq             dis14
3593
 00FFF663 0C605D                          ldb             #']'
3594
 00FFF665 017FFF6AA                       lbsr    OUTCH
3595 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3596
                              dis14:
3597 14 robfinch
 00FFF668 0C602C                          ldb             #','
3598
 00FFF66A 017FFF6A5                       lbsr    OUTCH
3599 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3600 14 robfinch
 00FFF66D 0E6E04                          ldb             ,s
3601
 00FFF66F 08D203                          bsr             disNdxReg
3602
 00FFF671 017FFF69E                       lbsr    OUTCH
3603 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3604 14 robfinch
 00FFF674 0C602D                          ldb             #'-'
3605
 00FFF676 017FFF699                       lbsr    OUTCH
3606 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3607 14 robfinch
 00FFF679 017FFF696                       lbsr    OUTCH
3608 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3609 14 robfinch
 00FFF67C 035004                          puls    b
3610
 00FFF67E 0C5100                          bitb    #$100
3611
 00FFF680 1270001BF                       lbeq    disNextLine
3612
 00FFF683 0C5080                          bitb    #$80
3613
 00FFF685 1260001BA                       lbne    disNextLine
3614
 00FFF688 0C605D                          ldb             #']'
3615
 00FFF68A 017FFF685                       lbsr    OUTCH
3616 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3617 14 robfinch
 00FFF68D 0160001B2                       lbra    disNextLine
3618 13 robfinch
                              disNotTO:
3619 14 robfinch
 00FFF690 0C100B                          cmpb    #11
3620
 00FFF692 026038                          bne             disNotDOffs
3621
 00FFF694 0C6044                          ldb             #'D'
3622
 00FFF696 017FFF679                       lbsr    OUTCH
3623 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3624 14 robfinch
 00FFF699 0E6E04                          ldb             ,s
3625
 00FFF69B 0C5080                          bitb    #$80                    ; outer indexed?
3626
 00FFF69D 027005                          beq             dis15
3627
 00FFF69F 0C605D                          ldb             #']'
3628
 00FFF6A1 017FFF66E                       lbsr    OUTCH
3629 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3630
                              dis15:
3631 14 robfinch
 00FFF6A4 0C602C                          ldb             #','
3632
 00FFF6A6 017FFF669                       lbsr    OUTCH
3633 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3634 14 robfinch
 00FFF6A9 0E6E04                          ldb             ,s
3635
 00FFF6AB 08D1C7                          bsr             disNdxReg
3636
 00FFF6AD 017FFF662                       lbsr    OUTCH
3637 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3638 14 robfinch
 00FFF6B0 0C602D                          ldb             #'-'
3639
 00FFF6B2 017FFF65D                       lbsr    OUTCH
3640 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3641 14 robfinch
 00FFF6B5 017FFF65A                       lbsr    OUTCH
3642 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3643 14 robfinch
 00FFF6B8 035004                          puls    b
3644
 00FFF6BA 0C5100                          bitb    #$100
3645
 00FFF6BC 127000183                       lbeq    disNextLine
3646
 00FFF6BF 0C5080                          bitb    #$80
3647
 00FFF6C1 12600017E                       lbne    disNextLine
3648
 00FFF6C4 0C605D                          ldb             #']'
3649
 00FFF6C6 017FFF649                       lbsr    OUTCH
3650 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3651 14 robfinch
 00FFF6C9 016000176                       lbra    disNextLine
3652 13 robfinch
                              disNotDOffs:
3653 14 robfinch
 00FFF6CC 0C100C                          cmpb    #12
3654
 00FFF6CE 026040                          bne             disNotPBO
3655
 00FFF6D0 0E6A00                          ldb             ,y+
3656
 00FFF6D2 01D                             sex
3657
 00FFF6D3 017FFED2B                       lbsr    DispWordAsHex
3658 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3659 14 robfinch
 00FFF6D6 0E6E04                          ldb             ,s
3660
 00FFF6D8 0C5080                          bitb    #$80                    ; outer indexed?
3661
 00FFF6DA 027005                          beq             dis16
3662
 00FFF6DC 0C605D                          ldb             #']'
3663
 00FFF6DE 017FFF631                       lbsr    OUTCH
3664 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3665
                              dis16:
3666 14 robfinch
 00FFF6E1 0C602C                          ldb             #','
3667
 00FFF6E3 017FFF62C                       lbsr    OUTCH
3668 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3669 14 robfinch
 00FFF6E6 0E6E04                          ldb             ,s
3670
 00FFF6E8 08D18A                          bsr             disNdxReg
3671
 00FFF6EA 0C6050                          ldb             #'P'
3672
 00FFF6EC 017FFF623                       lbsr    OUTCH
3673 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3674 14 robfinch
 00FFF6EF 0C6043                          ldb             #'C'
3675
 00FFF6F1 017FFF61E                       lbsr    OUTCH
3676 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3677 14 robfinch
 00FFF6F4 0C602D                          ldb             #'-'
3678
 00FFF6F6 017FFF619                       lbsr    OUTCH
3679 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3680 14 robfinch
 00FFF6F9 017FFF616                       lbsr    OUTCH
3681 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3682 14 robfinch
 00FFF6FC 035004                          puls    b
3683
 00FFF6FE 0C5100                          bitb    #$100
3684
 00FFF700 12700013F                       lbeq    disNextLine
3685
 00FFF703 0C5080                          bitb    #$80
3686
 00FFF705 12600013A                       lbne    disNextLine
3687
 00FFF708 0C605D                          ldb             #']'
3688
 00FFF70A 017FFF605                       lbsr    OUTCH
3689 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3690 14 robfinch
 00FFF70D 016000132                       lbra    disNextLine
3691 13 robfinch
                              disNotPBO:
3692 14 robfinch
 00FFF710 0C100D                          cmpb    #13
3693
 00FFF712 02603F                          bne             disNotPWO
3694
 00FFF714 0ECA01                          ldd             ,y++
3695
 00FFF716 017FFECE8                       lbsr    DispWordAsHex
3696 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3697 14 robfinch
 00FFF719 0E6E04                          ldb             ,s
3698
 00FFF71B 0C5080                          bitb    #$80                    ; outer indexed?
3699
 00FFF71D 027005                          beq             dis17
3700
 00FFF71F 0C605D                          ldb             #']'
3701
 00FFF721 017FFF5EE                       lbsr    OUTCH
3702 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3703
                              dis17:
3704 14 robfinch
 00FFF724 0C602C                          ldb             #','
3705
 00FFF726 017FFF5E9                       lbsr    OUTCH
3706 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3707 14 robfinch
 00FFF729 0E6E04                          ldb             ,s
3708
 00FFF72B 08D147                          bsr             disNdxReg
3709
 00FFF72D 0C6050                          ldb             #'P'
3710
 00FFF72F 017FFF5E0                       lbsr    OUTCH
3711 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3712 14 robfinch
 00FFF732 0C6043                          ldb             #'C'
3713
 00FFF734 017FFF5DB                       lbsr    OUTCH
3714 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3715 14 robfinch
 00FFF737 0C602D                          ldb             #'-'
3716
 00FFF739 017FFF5D6                       lbsr    OUTCH
3717 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3718 14 robfinch
 00FFF73C 017FFF5D3                       lbsr    OUTCH
3719 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3720 14 robfinch
 00FFF73F 035004                          puls    b
3721
 00FFF741 0C5100                          bitb    #$100
3722
 00FFF743 1270000FC                       lbeq    disNextLine
3723
 00FFF746 0C5080                          bitb    #$80
3724
 00FFF748 1260000F7                       lbne    disNextLine
3725
 00FFF74B 0C605D                          ldb             #']'
3726
 00FFF74D 017FFF5C2                       lbsr    OUTCH
3727 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3728 14 robfinch
 00FFF750 0160000EF                       lbra    disNextLine
3729 13 robfinch
                              disNotPWO:
3730 14 robfinch
 00FFF753 0C100E                          cmpb    #14
3731
 00FFF755 026044                          bne             disNotPTO
3732
 00FFF757 0E6A00                          ldb             ,y+
3733
 00FFF759 017FFECAE                       lbsr    DispByteAsHex
3734 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3735 14 robfinch
 00FFF75C 0ECA01                          ldd             ,y++
3736
 00FFF75E 017FFECA0                       lbsr    DispWordAsHex
3737 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3738 14 robfinch
 00FFF761 0E6E04                          ldb             ,s
3739
 00FFF763 0C5080                          bitb    #$80                    ; outer indexed?
3740
 00FFF765 027005                          beq             dis18
3741
 00FFF767 0C605D                          ldb             #']'
3742
 00FFF769 017FFF5A6                       lbsr    OUTCH
3743 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3744
                              dis18:
3745 14 robfinch
 00FFF76C 0C602C                          ldb             #','
3746
 00FFF76E 017FFF5A1                       lbsr    OUTCH
3747 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3748 14 robfinch
 00FFF771 0E6E04                          ldb             ,s
3749
 00FFF773 08D0FF                          bsr             disNdxReg
3750
 00FFF775 0C6050                          ldb             #'P'
3751
 00FFF777 017FFF598                       lbsr    OUTCH
3752 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3753 14 robfinch
 00FFF77A 0C6043                          ldb             #'C'
3754
 00FFF77C 017FFF593                       lbsr    OUTCH
3755 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3756 14 robfinch
 00FFF77F 0C602D                          ldb             #'-'
3757
 00FFF781 017FFF58E                       lbsr    OUTCH
3758 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3759 14 robfinch
 00FFF784 017FFF58B                       lbsr    OUTCH
3760 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3761 14 robfinch
 00FFF787 035004                          puls    b
3762
 00FFF789 0C5100                          bitb    #$100
3763
 00FFF78B 1270000B4                       lbeq    disNextLine
3764
 00FFF78E 0C5080                          bitb    #$80
3765
 00FFF790 1260000AF                       lbne    disNextLine
3766
 00FFF793 0C605D                          ldb             #']'
3767
 00FFF795 017FFF57A                       lbsr    OUTCH
3768 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3769 14 robfinch
 00FFF798 0160000A7                       lbra    disNextLine
3770 13 robfinch
                              disNotPTO:
3771 14 robfinch
 00FFF79B 0C605B                          ldb             #'['
3772
 00FFF79D 017FFF572                       lbsr    OUTCH
3773 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3774 14 robfinch
 00FFF7A0 0ECA01                          ldd             ,y++
3775
 00FFF7A2 017FFEC5C                       lbsr    DispWordAsHex
3776 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3777 14 robfinch
 00FFF7A5 0C605D                          ldb             #']'
3778
 00FFF7A7 017FFF568                       lbsr    OUTCH
3779 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3780 14 robfinch
 00FFF7AA 016000095                       lbra    disNextLine
3781 13 robfinch
                              disNotNdx:
3782 14 robfinch
 00FFF7AD 0C1006                          cmpb    #EXT
3783
 00FFF7AF 026013                          bne             disNotExt
3784
 00FFF7B1 00D15F                          tst             farflag
3785
 00FFF7B3 027005                          beq             dis30
3786
 00FFF7B5 0E6A01                          ldb             ,y++
3787
 00FFF7B7 017FFEC50                       lbsr    DispByteAsHex
3788 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3789 14 robfinch
                              dis30:
3790
 00FFF7BA 0ECA01                          ldd             ,y++
3791
 00FFF7BC 017FFEC42                       lbsr    DispWordAsHex
3792
*** warning 1: Long branch within short branch range could be optimized
3793
 00FFF7BF 00F15F                          clr             farflag
3794
 00FFF7C1 01600007E                       lbra    disNextLine
3795 13 robfinch
                              disNotExt:
3796 14 robfinch
 00FFF7C4 0C1003                          cmpb    #IMMB
3797
 00FFF7C6 02600D                          bne             disNotIMMB
3798
 00FFF7C8 0C6023                          ldb             #'#'
3799
 00FFF7CA 017FFF545                       lbsr    OUTCH
3800 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3801 14 robfinch
 00FFF7CD 0E6A00                          ldb             ,y+
3802
 00FFF7CF 017FFEC38                       lbsr    DispByteAsHex
3803 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3804 14 robfinch
 00FFF7D2 01600006D                       lbra    disNextLine
3805 13 robfinch
                              disNotIMMB:
3806 14 robfinch
 00FFF7D5 0C1007                          cmpb    #IMMW
3807
 00FFF7D7 02600C                          bne             disNotIMMW
3808
 00FFF7D9 0C6023                          ldb             #'#'
3809
 00FFF7DB 017FFF534                       lbsr    OUTCH
3810 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3811 14 robfinch
 00FFF7DE 0ECA01                          ldd             ,y++
3812
 00FFF7E0 017FFEC1E                       lbsr    DispWordAsHex
3813 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3814 14 robfinch
 00FFF7E3 02005D                          bra             disNextLine
3815 13 robfinch
                              disNotIMMW:
3816 14 robfinch
 00FFF7E5 0C1009                          cmpb    #TFREXG
3817
 00FFF7E7 026006                          bne             disNotTfr
3818
 00FFF7E9 0E6A00                          ldb             ,y+
3819
 00FFF7EB 08D0B8                          bsr             disTfrExg
3820
 00FFF7ED 020053                          bra             disNextLine
3821
                              disNotTfr:
3822 13 robfinch
                              dis1:
3823 14 robfinch
 00FFF7EF 0C1121                          cmpb    #$121
3824
 00FFF7F1 025028                          blo             dis19
3825
 00FFF7F3 0C112F                          cmpb    #$12F
3826
 00FFF7F5 022024                          bhi             dis19
3827
 00FFF7F7 0C40FF                          andb    #$FF
3828
 00FFF7F9 08EFFF2B4                       ldx             #distbl2
3829
 00FFF7FC 058                             aslb
3830
 00FFF7FD 058                             aslb
3831
 00FFF7FE 03A                             abx
3832
 00FFF7FF 0E6800                          ldb             ,x+
3833
 00FFF801 017FFF50E                       lbsr    OUTCH
3834 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3835 14 robfinch
 00FFF804 0E6800                          ldb             ,x+
3836
 00FFF806 017FFF509                       lbsr    OUTCH
3837 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3838 14 robfinch
 00FFF809 0E6800                          ldb             ,x+
3839
 00FFF80B 017FFF504                       lbsr    OUTCH
3840 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3841 14 robfinch
 00FFF80E 0E6800                          ldb             ,x+
3842
 00FFF810 017FFF4FF                       lbsr    OUTCH
3843 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3844 14 robfinch
 00FFF813 0C6020                          ldb             #' '
3845
 00FFF815 017FFF4FA                       lbsr    OUTCH
3846 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3847 14 robfinch
 00FFF818 016FFFBF4                       lbra    dis21
3848 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3849
                              dis19:
3850 14 robfinch
 00FFF81B 08E000000                       ldx             #0
3851 13 robfinch
                              dis24:
3852 14 robfinch
 00FFF81E 0E180A000FFF2F4                 cmpb    distbl3,x
3853
 00FFF823 026006                          bne             dis25
3854
 00FFF825 08EFFF314                       ldx             #distbl4
3855
 00FFF828 016FFFBB2                       lbra    dis23
3856 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3857
                              dis25:
3858 14 robfinch
 00FFF82B 030001                          inx
3859
 00FFF82D 08C00001F                       cmpx    #31
3860
 00FFF830 025FEC                          blo             dis24
3861
 00FFF832 0C603F                          ldb             #'?'
3862
 00FFF834 017FFF4DB                       lbsr    OUTCH
3863 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3864 14 robfinch
 00FFF837 017FFF4D8                       lbsr    OUTCH
3865 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3866 14 robfinch
 00FFF83A 017FFF4D5                       lbsr    OUTCH
3867 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3868 14 robfinch
 00FFF83D 017FFF4D2                       lbsr    OUTCH
3869 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3870 14 robfinch
 00FFF840 020000                          bra             disNextLine
3871
                              disNextLine:
3872
 00FFF842 00F15F                          clr             farflag
3873
 00FFF844 017FFD88B                       lbsr    CRLF
3874 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3875 14 robfinch
 00FFF847 1BC000926                       cmpy    mon_r2+2
3876
 00FFF84A 125FFFB72                       lblo    disLoop1
3877 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3878 14 robfinch
 00FFF84D 0160000DE                       lbra    Monitor
3879 13 robfinch
 
3880
                              disNdxRegs:
3881 14 robfinch
 00FFF850 058059053055                    fcb             'X','Y','S','U'
3882
                              disTfrRegs:
3883
 00FFF854 044020058020059020055           fcb             "D X Y U S PC    A B CCDP        "
3884
 00FFF85B 020053020050043020020
3885
 00FFF862 020020041020042020043
3886
 00FFF869 043044050020020020020
3887
 00FFF870 020020020020
3888
 
3889 13 robfinch
                              disNdxReg:
3890 14 robfinch
 00FFF874 0C4600                          andb    #$600
3891
 00FFF876 059                             rolb
3892
 00FFF877 059                             rolb
3893
 00FFF878 059                             rolb
3894
 00FFF879 059                             rolb
3895
 00FFF87A 04F                             clra
3896
 00FFF87B 034040                          pshs    u
3897
 00FFF87D 01F003                          tfr             d,u
3898
 00FFF87F 0A6C0A000FFF850                 lda             disNdxRegs,u
3899
 00FFF884 035040                          puls    u
3900
 00FFF886 01E089                          exg             a,b
3901
 00FFF888 039                             rts
3902 13 robfinch
 
3903 14 robfinch
                              disTfrReg:
3904
 00FFF889 034014                          pshs    b,x
3905
 00FFF88B 08EFFF854                       ldx             #disTfrRegs
3906
 00FFF88E 058                             aslb
3907
 00FFF88F 0A6815                          lda             b,x
3908
 00FFF891 01E089                          exg             a,b
3909
 00FFF893 017FFF47C                       lbsr    OUTCH
3910
*** warning 1: Long branch within short branch range could be optimized
3911
 00FFF896 01E089                          exg             a,b
3912
 00FFF898 030001                          inx
3913
 00FFF89A 0E688D                          ldb             b,x
3914
 00FFF89C 0C1020                          cmpb    #' '
3915
 00FFF89E 027003                          beq             disTfr1
3916
 00FFF8A0 017FFF46F                       lbsr    OUTCH
3917
*** warning 1: Long branch within short branch range could be optimized
3918
                              disTfr1:
3919
 00FFF8A3 035094                          puls    b,x,pc
3920
 
3921
                              disTfrExg:
3922
 00FFF8A5 034004                          pshs    b
3923
 00FFF8A7 059                             rolb
3924
 00FFF8A8 059                             rolb
3925
 00FFF8A9 059                             rolb
3926
 00FFF8AA 059                             rolb
3927
 00FFF8AB 0C400F                          andb    #15
3928
 00FFF8AD 08DFDA                          bsr             disTfrReg
3929
 00FFF8AF 0C602C                          ldb             #','
3930
 00FFF8B1 017FFF45E                       lbsr    OUTCH
3931
*** warning 1: Long branch within short branch range could be optimized
3932
 00FFF8B4 0E6E04                          ldb             ,s
3933
 00FFF8B6 0C400F                          andb    #15
3934
 00FFF8B8 08DFCF                          bsr             disTfrReg
3935
 00FFF8BA 035084                          puls    b,pc
3936
 
3937 13 robfinch
                              ASMO:
3938 14 robfinch
 00FFF8BC 034006                          pshs    d
3939
 00FFF8BE 0CCFFF8D0                       ldd             #ASMOUTCH
3940
 00FFF8C1 0FD000800                       std             CharOutVec
3941
 00FFF8C4 035086                          puls    d,pc
3942 13 robfinch
 
3943
                              ASMOO:
3944 14 robfinch
 00FFF8C6 034006                          pshs    d
3945
 00FFF8C8 0CCFFE2F5                       ldd             #DisplayChar
3946
 00FFF8CB 0FD000800                       std             CharOutVec
3947
 00FFF8CE 035086                          puls    d,pc
3948 13 robfinch
 
3949
                              ASMOUTCH:
3950 14 robfinch
 00FFF8D0 0E7C00                          stb             ,u+
3951
 00FFF8D2 039                             rts
3952 13 robfinch
 
3953
                              DumpAsmbuf:
3954 14 robfinch
 00FFF8D3 0CE000160                       ldu             #asmbuf
3955 13 robfinch
                              dab2:
3956 14 robfinch
 00FFF8D6 0E6C00                          ldb             ,u+
3957
 00FFF8D8 027005                          beq             dab1
3958
 00FFF8DA 017FFF435                       lbsr    OUTCH
3959 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3960 14 robfinch
 00FFF8DD 020FF7                          bra             dab2
3961 13 robfinch
                              dab1:
3962 14 robfinch
 00FFF8DF 039                             rts
3963 13 robfinch
 
3964
                              ;==============================================================================
3965 4 robfinch
                              ; System Monitor
3966
                              ;==============================================================================
3967 13 robfinch
 
3968
                              CmdPrompt:
3969 14 robfinch
 00FFF8E0 017FFD7EF                       lbsr    CRLF
3970 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3971 14 robfinch
 00FFF8E3 0C6024                          ldb             #'$'
3972
 00FFF8E5 017FFF42A                       lbsr    OUTCH
3973 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3974 14 robfinch
 00FFF8E8 016FFF427                       lbra    OUTCH
3975 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3976
 
3977
                              msgF09Starting:
3978 14 robfinch
 00FFF8EB 04606506D07406906B069           fcb             "Femtiki F09 Multi-core OS Starting",CR,LF,0
3979
 00FFF8F2 02004603003902004D075
3980
 00FFF8F9 06C07406902D06306F072
3981
 00FFF900 06502004F053020053074
3982
 00FFF907 06107207406906E06700D
3983
 00FFF90E 00A000
3984 13 robfinch
 
3985 4 robfinch
                              MonitorStart:
3986 14 robfinch
 00FFF910 0CCFFF8EB                       ldd             #msgF09Starting
3987
 00FFF913 017FFEAA0                       lbsr    DisplayString
3988 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3989 14 robfinch
 00FFF916 0CCFFFB0E                       ldd             #HelpMsg
3990
 00FFF919 017FFEA9A                       lbsr    DisplayString
3991 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
3992 14 robfinch
 00FFF91C 0CCFFF8E0                       ldd             #CmdPrompt
3993
 00FFF91F 0FD000808                       std             CmdPromptJI
3994
 00FFF922 0CCFFFAF5                       ldd             #DisplayErr
3995
 00FFF925 0FD00080C                       std             MonErrVec
3996
 00FFF928 0CC0063FF                       ldd             #$63FF                  ; default app stack
3997
 00FFF92B 0FD000908                       std             mon_SSAVE
3998 4 robfinch
                              Monitor:
3999 14 robfinch
 00FFF92E 03280F006FFF                    leas    $6FFF                           ; reset stack pointer
4000
 00FFF932 05F                             clrb                                                    ; turn off keyboard echo
4001
 00FFF933 017FFF3E0                       lbsr    SetKeyboardEcho
4002 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4003
                                      ; Reset IO vectors
4004 14 robfinch
 00FFF936 0CCFFEBE4                       ldd             #SerialPeekCharDirect
4005
 00FFF939 0FD000804                       std             CharInVec
4006
 00FFF93C 0CCFFE2F5                       ldd             #DisplayChar
4007
 00FFF93F 0FD000800                       std             CharOutVec
4008
 00FFF942 0CCFFF8E0                       ldd             #CmdPrompt
4009
 00FFF945 0FD000808                       std             CmdPromptJI
4010 4 robfinch
                              ;       jsr             RequestIOFocus
4011
                              PromptLn:
4012 14 robfinch
 00FFF948 0AD90F000808                    jsr             [CmdPromptJI]
4013 4 robfinch
 
4014
                              ; Get characters until a CR is keyed
4015
 
4016
                              Prompt3:
4017 14 robfinch
 00FFF94C 0CCFFFFFF                       ldd             #-1                                     ; block until key present
4018
 00FFF94F 017FFF388                       lbsr    INCH
4019 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4020 14 robfinch
 00FFF952 0C100D                          cmpb    #CR
4021
 00FFF954 027005                          beq             Prompt1
4022
 00FFF956 017FFF3B9                       lbsr    OUTCH
4023 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4024 14 robfinch
 00FFF959 020FF1                          bra             Prompt3
4025 4 robfinch
 
4026
                              ; Process the screen line that the CR was keyed on
4027
                              ;
4028
                              Prompt1:
4029 14 robfinch
 00FFF95B 0CC005050                       ldd             #$5050
4030
 00FFF95E 0150FDFFFE60001                 std             LEDS
4031 13 robfinch
                              ;       ldb             RunningID
4032
                              ;       cmpb    #61
4033
                              ;       bhi             Prompt3
4034 14 robfinch
 00FFF963 0CC005151                       ldd             #$5151
4035
 00FFF966 0150FDFFFE60001                 std             LEDS
4036
 00FFF96B 00F111                          clr             CursorCol                       ; go back to the start of the line
4037
 00FFF96D 017FFE962                       lbsr    CalcScreenLoc   ; calc screen memory location
4038 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4039 14 robfinch
 00FFF970 01F002                          tfr             d,y
4040
 00FFF972 0CC005252                       ldd             #$5252
4041
 00FFF975 0150FDFFFE60001                 std             LEDS
4042 13 robfinch
                              skipDollar:
4043 14 robfinch
 00FFF97A 08D0B9                          bsr             MonGetNonSpace
4044
 00FFF97C 0C1024                          cmpb    #'$'
4045
 00FFF97E 027FFA                          beq             skipDollar              ; skip over '$' prompt character
4046
 00FFF980 086353                          lda             #$5353
4047
 00FFF982 0150FDFFFE60001                 std             LEDS
4048 4 robfinch
 
4049
                              ; Dispatch based on command character
4050
                              ;
4051
                              Prompt2:
4052 14 robfinch
 00FFF987 0C103C                          cmpb    #'<'
4053
 00FFF989 02602C                          bne             PromptHelp
4054
 00FFF98B 08D0A3                          bsr             MonGetch
4055
 00FFF98D 0C103E                          cmpb    #'>'
4056
 00FFF98F 026F9D                          bne             Monitor
4057
 00FFF991 08D09D                          bsr             MonGetch
4058
 00FFF993 0C1073                          cmpb    #'s'
4059
 00FFF995 02600E                          bne             Prompt2a
4060
 00FFF997 0CCFFEBE4                       ldd             #SerialPeekCharDirect
4061
 00FFF99A 0FD000804                       std             CharInVec
4062
 00FFF99D 0CCFFEC08                       ldd             #SerialPutChar
4063
 00FFF9A0 0FD000800                       std             CharOutVec
4064
 00FFF9A3 020F89                          bra             Monitor
4065 13 robfinch
                              Prompt2a:
4066 14 robfinch
 00FFF9A5 0C1063                          cmpb    #'c'
4067
 00FFF9A7 026F85                          bne             Monitor
4068
 00FFF9A9 0CCFFEA12                       ldd             #GetKey
4069
 00FFF9AC 0FD000804                       std             CharInVec
4070
 00FFF9AF 0CCFFE2F5                       ldd             #DisplayChar
4071
 00FFF9B2 0FD000800                       std             CharOutVec
4072
 00FFF9B5 020F77                          bra             Monitor
4073 13 robfinch
                              PromptHelp:
4074 14 robfinch
 00FFF9B7 0C103F                          cmpb    #'?'                    ; $? - display help
4075
 00FFF9B9 026008                          bne             PromptC
4076
 00FFF9BB 0CCFFFB0E                       ldd             #HelpMsg
4077
 00FFF9BE 017FFE9F5                       lbsr    DisplayString
4078 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4079 14 robfinch
 00FFF9C1 020F6B                          bra             Monitor
4080 4 robfinch
                              PromptC:
4081 14 robfinch
 00FFF9C3 0C1043                          cmpb    #'C'
4082
 00FFF9C5 026008                          bne             PromptD
4083
 00FFF9C7 017FFE85B                       lbsr    ClearScreen
4084 4 robfinch
*** warning 1: Long branch within short branch range could be optimized
4085 14 robfinch
 00FFF9CA 017FFE8CB                       lbsr    HomeCursor
4086 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4087 14 robfinch
 00FFF9CD 020F5F                          bra             Monitor
4088 4 robfinch
                              PromptD:
4089 14 robfinch
 00FFF9CF 0C1044                          cmpb    #'D'
4090
 00FFF9D1 026008                          bne             PromptColon
4091
 00FFF9D3 08D05B                          bsr             MonGetch
4092
 00FFF9D5 0C1052                          cmpb    #'R'
4093
 00FFF9D7 02626F                          bne             DumpMemory
4094
 00FFF9D9 020309                          bra             DumpRegs
4095
                              PromptColon:
4096
 00FFF9DB 0C103A                          cmpb    #':'
4097
 00FFF9DD 026003                          bne             PromptF
4098
 00FFF9DF 0160002C2                       lbra    EditMemory
4099 4 robfinch
                              PromptF:
4100 14 robfinch
 00FFF9E2 0C1046                          cmpb    #'F'
4101
 00FFF9E4 026016                          bne             PromptJ
4102
 00FFF9E6 08D048                          bsr             MonGetch
4103
 00FFF9E8 0C1049                          cmpb    #'I'
4104
 00FFF9EA 026009                          bne             PromptFL
4105
 00FFF9EC 08D042                          bsr             MonGetch
4106
 00FFF9EE 0C1047                          cmpb    #'G'
4107
 00FFF9F0 026F3C                          bne             Monitor
4108
 00FFF9F2 07EFE0000                       jmp             $FE0000
4109
                              PromptFL:
4110
 00FFF9F5 0C104C                          cmpb    #'L'
4111
 00FFF9F7 026F35                          bne             Monitor
4112
 00FFF9F9 0160003A9                       lbra    DumpIOFocusList
4113 4 robfinch
                              PromptJ:
4114 14 robfinch
 00FFF9FC 0C104A                          cmpb    #'J'
4115
 00FFF9FE 12700032E                       lbeq    jump_to_code
4116 4 robfinch
                              PromptR:
4117 14 robfinch
 00FFFA01 0C1052                          cmpb    #'R'
4118
 00FFFA03 026006                          bne             Prompt_s
4119
 00FFFA05 0CEFFF92E                       ldu             #Monitor
4120
 00FFFA08 016FFD9F5                       lbra    ramtest
4121 4 robfinch
*** warning 1: Long branch within short branch range could be optimized
4122 13 robfinch
                              Prompt_s:
4123 14 robfinch
 00FFFA0B 0C1073                          cmpb    #'s'
4124
 00FFFA0D 026005                          bne             PromptT
4125
 00FFFA0F 017FFF293                       lbsr    SerialOutputTest
4126 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4127 14 robfinch
 00FFFA12 020F1A                          bra             Monitor
4128 13 robfinch
                              PromptT:
4129 14 robfinch
 00FFFA14 0C1054                          cmpb    #'T'
4130
 00FFFA16 026011                          bne             PromptU
4131
 00FFFA18 08D016                          bsr             MonGetch
4132
 00FFFA1A 0C1049                          cmpb    #'I'
4133
 00FFFA1C 026F10                          bne             Monitor
4134
 00FFFA1E 08D010                          bsr             MonGetch
4135
 00FFFA20 0C1052                          cmpb    #'R'
4136
 00FFFA22 026F0A                          bne             Monitor
4137
 00FFFA24 017FFEAA0                       lbsr    rtc_read
4138 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4139 14 robfinch
 00FFFA27 020F05                          bra             Monitor
4140 13 robfinch
                              PromptU:
4141 14 robfinch
 00FFFA29 0C1055                          cmpb    #'U'
4142
 00FFFA2B 026F01                          bne             Monitor
4143
 00FFFA2D 016FFF984                       lbra    disassem
4144 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4145 4 robfinch
 
4146
                              MonGetch:
4147 14 robfinch
 00FFFA30 0E6A04                          ldb             ,y
4148
 00FFFA32 031201                          iny
4149
 00FFFA34 039                             rts
4150 4 robfinch
 
4151
                              MonGetNonSpace:
4152 14 robfinch
 00FFFA35 08DFF9                          bsr             MonGetCh
4153
 00FFFA37 0C1020                          cmpb    #' '
4154
 00FFFA39 027FFA                          beq             MonGetNonSpace
4155
 00FFFA3B 039                             rts
4156 4 robfinch
 
4157
                              ;------------------------------------------------------------------------------
4158
                              ; Ignore blanks in the input
4159
                              ; Y = text pointer
4160
                              ; D destroyed
4161
                              ;------------------------------------------------------------------------------
4162
                              ;
4163
                              ignBlanks:
4164
                              ignBlanks1:
4165 14 robfinch
 00FFFA3C 08DFF2                          bsr             MonGetch
4166
 00FFFA3E 0C1020                          cmpb    #' '
4167
 00FFFA40 027FFA                          beq             ignBlanks1
4168
 00FFFA42 0313FF                          dey
4169
 00FFFA44 039                             rts
4170 4 robfinch
 
4171
                              ;------------------------------------------------------------------------------
4172
                              ;------------------------------------------------------------------------------
4173
                              GetTwoParams:
4174 14 robfinch
 00FFFA45 08DFF5                          bsr             ignBlanks
4175
 00FFFA47 08D046                          bsr             GetHexNumber    ; get start address of dump
4176
 00FFFA49 0FC000910                       ldd             mon_numwka
4177
 00FFFA4C 0FD000920                       std             mon_r1
4178
 00FFFA4F 0FC000912                       ldd             mon_numwka+2
4179
 00FFFA52 0FD000922                       std             mon_r1+2
4180
 00FFFA55 08DFE5                          bsr             ignBlanks
4181
 00FFFA57 08D036                          bsr             GetHexNumber    ; get end address of dump
4182
 00FFFA59 0FC000910                       ldd             mon_numwka
4183
 00FFFA5C 0FD000924                       std             mon_r2
4184
 00FFFA5F 0FC000912                       ldd             mon_numwka+2
4185
 00FFFA62 0FD000926                       std             mon_r2+2
4186
 00FFFA65 039                             rts
4187 4 robfinch
 
4188
                              ;------------------------------------------------------------------------------
4189
                              ; Get a range, the end must be greater or equal to the start.
4190
                              ;------------------------------------------------------------------------------
4191
                              GetRange:
4192 14 robfinch
 00FFFA66 08DFDD                          bsr             GetTwoParams
4193
 00FFFA68 0FC000926                       ldd             mon_r2+2
4194
 00FFFA6B 0B3000922                       subd    mon_r1+2
4195
 00FFFA6E 0FC000924                       ldd             mon_r2
4196
 00FFFA71 0F2000921                       sbcb    mon_r1+1
4197
 00FFFA74 0B2000920                       sbca    mon_r1
4198
 00FFFA77 124000007                       lbcc    grng1
4199
 00FFFA7A 0AD90F00080C                    jsr             [MonErrVec]
4200
 00FFFA7E 016FFFEAD                       lbra    Monitor
4201
*** warning 1: Long branch within short branch range could be optimized
4202
                              grng1:
4203
 00FFFA81 039                             rts
4204 4 robfinch
 
4205
                              shl_numwka:
4206 14 robfinch
 00FFFA82 078000913                       asl             mon_numwka+3
4207
 00FFFA85 079000912                       rol             mon_numwka+2
4208
 00FFFA88 079000911                       rol             mon_numwka+1
4209
 00FFFA8B 079000910                       rol             mon_numwka
4210
 00FFFA8E 039                             rts
4211 4 robfinch
 
4212
                              ;------------------------------------------------------------------------------
4213 13 robfinch
                              ; Get a hexidecimal number. Maximum of twelve digits.
4214
                              ;
4215
                              ; Modifies:
4216
                              ;       Y = text pointer (updated)
4217
                              ;       D = number of digits
4218
                              ;       mon_numwka contains number
4219 4 robfinch
                              ;------------------------------------------------------------------------------
4220
                              ;
4221
                              GetHexNumber:
4222 14 robfinch
 00FFFA8F 04F05F                          clrd
4223
 00FFFA91 0FD000910                       std             mon_numwka      ; zero out work area
4224
 00FFFA94 0FD000912                       std             mon_numwka+2
4225
 00FFFA97 034010                          pshs    x
4226
 00FFFA99 08E000000                       ldx             #0                                      ; max 12 eight digits
4227 4 robfinch
                              gthxn2:
4228 14 robfinch
 00FFFA9C 08DF92                          bsr             MonGetch
4229
 00FFFA9E 08D01F                          bsr             AsciiToHexNybble
4230
 00FFFAA0 0C1FFF                          cmpb    #-1
4231
 00FFFAA2 027017                          beq             gthxn1
4232
 00FFFAA4 08DFDC                          bsr             shl_numwka
4233
 00FFFAA6 08DFDA                          bsr             shl_numwka
4234
 00FFFAA8 08DFD8                          bsr             shl_numwka
4235
 00FFFAAA 08DFD6                          bsr             shl_numwka
4236
 00FFFAAC 0C400F                          andb    #$0f
4237
 00FFFAAE 0FA000913                       orb             mon_numwka+3
4238
 00FFFAB1 0F7000913                       stb             mon_numwka+3
4239
 00FFFAB4 030001                          inx
4240
 00FFFAB6 08C00000C                       cmpx    #12
4241
 00FFFAB9 025FE1                          blo             gthxn2
4242 4 robfinch
                              gthxn1:
4243 14 robfinch
 00FFFABB 01F010                          tfr             x,d
4244
 00FFFABD 035090                          puls    x,pc
4245 4 robfinch
 
4246
                              ;GetDecNumber:
4247
                              ;       phx
4248
                              ;       push    r4
4249
                              ;       push    r5
4250
                              ;       ldx             #0
4251
                              ;       ld              r4,#10
4252
                              ;       ld              r5,#10
4253
                              ;gtdcn2:
4254
                              ;       jsr             MonGetch
4255
                              ;       jsr             AsciiToDecNybble
4256
                              ;       cmp             #-1
4257
                              ;       beq             gtdcn1
4258
                              ;       mul             r2,r2,r5
4259
                              ;       add             r2,r1
4260
                              ;       dec             r4
4261
                              ;       bne             gtdcn2
4262
                              ;gtdcn1:
4263
                              ;       txa
4264
                              ;       pop             r5
4265
                              ;       pop             r4
4266
                              ;       plx
4267
                              ;       rts
4268
 
4269
                              ;------------------------------------------------------------------------------
4270
                              ; Convert ASCII character in the range '0' to '9', 'a' to 'f' or 'A' to 'F'
4271
                              ; to a hex nybble.
4272
                              ;------------------------------------------------------------------------------
4273
                              ;
4274
                              AsciiToHexNybble:
4275 14 robfinch
 00FFFABF 0C1030                          cmpb    #'0'
4276
 00FFFAC1 025021                          blo             gthx3
4277
 00FFFAC3 0C1039                          cmpb    #'9'
4278
 00FFFAC5 022003                          bhi             gthx5
4279
 00FFFAC7 0C0030                          subb    #'0'
4280
 00FFFAC9 039                             rts
4281 4 robfinch
                              gthx5:
4282 14 robfinch
 00FFFACA 0C1041                          cmpb    #'A'
4283
 00FFFACC 025016                          blo             gthx3
4284
 00FFFACE 0C1046                          cmpb    #'F'
4285
 00FFFAD0 022005                          bhi             gthx6
4286
 00FFFAD2 0C0041                          subb    #'A'
4287
 00FFFAD4 0CB00A                          addb    #10
4288
 00FFFAD6 039                             rts
4289 4 robfinch
                              gthx6:
4290 14 robfinch
 00FFFAD7 0C1061                          cmpb    #'a'
4291
 00FFFAD9 025009                          blo             gthx3
4292
 00FFFADB 0C107A                          cmpb    #'z'
4293
 00FFFADD 022005                          bhi             gthx3
4294
 00FFFADF 0C0061                          subb    #'a'
4295
 00FFFAE1 0CB00A                          addb    #10
4296
 00FFFAE3 039                             rts
4297 4 robfinch
                              gthx3:
4298 14 robfinch
 00FFFAE4 0C6FFF                          ldb             #-1             ; not a hex number
4299
 00FFFAE6 039                             rts
4300 4 robfinch
 
4301
                              AsciiToDecNybble:
4302 14 robfinch
 00FFFAE7 0C1030                          cmpb    #'0'
4303
 00FFFAE9 024007                          bcc             gtdc3
4304
 00FFFAEB 0C103A                          cmpb    #'9'+1
4305
 00FFFAED 025003                          bcs             gtdc3
4306
 00FFFAEF 0C0030                          subb    #'0'
4307
 00FFFAF1 039                             rts
4308 4 robfinch
                              gtdc3:
4309 14 robfinch
 00FFFAF2 0C6FFF                          ldb             #-1
4310
 00FFFAF4 039                             rts
4311 4 robfinch
 
4312
                              DisplayErr:
4313 14 robfinch
 00FFFAF5 0CCFFFB06                       ldd             #msgErr
4314
 00FFFAF8 017FFE8BB                       lbsr    DisplayString
4315
*** warning 1: Long branch within short branch range could be optimized
4316
 00FFFAFB 07EFFF92E                       jmp             Monitor
4317 4 robfinch
 
4318
                              DisplayStringDX
4319 14 robfinch
 00FFFAFE 0DD024                          std             Strptr
4320
 00FFFB00 09F026                          stx             Strptr+2
4321
 00FFFB02 0BDFFE3B6                       jsr             DisplayString
4322
 00FFFB05 039                             rts
4323 4 robfinch
 
4324
                              msgErr:
4325 14 robfinch
 00FFFB06 02A02A04507207200D00A           fcb     "**Err",CR,LF,0
4326
 00FFFB0D 000
4327 4 robfinch
 
4328
                              HelpMsg:
4329 14 robfinch
 00FFFB0E 03F02003D020044069073           fcb             "? = Display help",CR,LF
4330
 00FFFB15 07006C061079020068065
4331
 00FFFB1C 06C07000D00A
4332
 00FFFB20 04304C05302003D020063           fcb     "CLS = clear screen",CR,LF
4333
 00FFFB27 06C065061072020073063
4334
 00FFFB2E 07206506506E00D00A
4335 4 robfinch
                              ;       db      "S = Boot from SD Card",CR,LF
4336 14 robfinch
 00FFFB34 03A02003D020045064069           fcb     ": = Edit memory bytes",CR,LF
4337
 00FFFB3B 07402006D06506D06F072
4338
 00FFFB42 079020062079074065073
4339
 00FFFB49 00D00A
4340 4 robfinch
                              ;       db      "L = Load sector",CR,LF
4341
                              ;       db      "W = Write sector",CR,LF
4342 14 robfinch
 00FFFB4B 04405202003D020044075           fcb "DR = Dump registers",CR,LF
4343
 00FFFB52 06D070020072065067069
4344
 00FFFB59 07307406507207300D00A
4345
 00FFFB60 04402003D02004407506D           fcb     "D = Dump memory",CR,LF
4346
 00FFFB67 07002006D06506D06F072
4347
 00FFFB6E 07900D00A
4348 4 robfinch
                              ;       db      "F = Fill memory",CR,LF
4349 14 robfinch
 00FFFB71 04604C02003D020044075           fcb "FL = Dump I/O Focus List",CR,LF
4350
 00FFFB78 06D07002004902F04F020
4351
 00FFFB7F 04606F06307507302004C
4352
 00FFFB86 06907307400D00A
4353
 00FFFB8B 04604904702003D020073           fcb "FIG = start FIG Forth",CR,LF
4354
 00FFFB92 074061072074020046049
4355
 00FFFB99 04702004606F072074068
4356
 00FFFBA0 00D00A
4357 4 robfinch
                              ;       db      "KILL n = kill task #n",CR,LF
4358
                              ;       db      "B = start tiny basic",CR,LF
4359
                              ;       db      "b = start EhBasic 6502",CR,LF
4360 14 robfinch
 00FFFBA2 04A02003D02004A07506D           fcb     "J = Jump to code",CR,LF
4361
 00FFFBA9 07002007406F02006306F
4362
 00FFFBB0 06406500D00A
4363
 00FFFBB4 05204104D02003D020074           fcb "RAM = test RAM",CR,LF
4364
 00FFFBBB 06507307402005204104D
4365
 00FFFBC2 00D00A
4366 4 robfinch
                              ;       db      "R[n] = Set register value",CR,LF
4367
                              ;       db      "r = random lines - test bitmap",CR,LF
4368
                              ;       db      "e = ethernet test",CR,LF
4369 14 robfinch
 00FFFBC4 07302003D020073065072           fcb     "s = serial output test",CR,LF
4370
 00FFFBCB 06906106C02006F075074
4371
 00FFFBD2 070075074020074065073
4372
 00FFFBD9 07400D00A
4373 4 robfinch
                              ;       db      "T = Dump task list",CR,LF
4374
                              ;       db      "TO = Dump timeout list",CR,LF
4375 14 robfinch
 00FFFBDC 05404902003D020064069           fcb     "TI = display date/time",CR,LF
4376
 00FFFBE3 07307006C061079020064
4377
 00FFFBEA 06107406502F07406906D
4378
 00FFFBF1 06500D00A
4379 4 robfinch
                              ;       db      "TEMP = display temperature",CR,LF
4380 14 robfinch
 00FFFBF4 05502003D02007506E061           fcb     "U = unassemble",CR,LF
4381
 00FFFBFB 07307306506D06206C065
4382
 00FFFC02 00D00A
4383 4 robfinch
                              ;       db      "P = Piano",CR,LF,0
4384 14 robfinch
 00FFFC04 000                             fcb             0
4385 4 robfinch
 
4386
                              msgRegHeadings
4387 14 robfinch
 00FFFC05 00D00A02002004402F041           fcb     CR,LF,"  D/AB     X      Y      U      S       PC    DP  CCR",CR,LF,0
4388
 00FFFC0C 042020020020020020058
4389
 00FFFC13 020020020020020020059
4390
 00FFFC1A 020020020020020020055
4391
 00FFFC21 020020020020020020053
4392
 00FFFC28 020020020020020020020
4393
 00FFFC2F 050043020020020020044
4394
 00FFFC36 05002002004304305200D
4395
 00FFFC3D 00A000
4396 4 robfinch
 
4397
                              nHEX4:
4398 14 robfinch
 00FFFC3F 0BDFFD2D2                       jsr             HEX4
4399
 00FFFC42 039                             rts
4400 4 robfinch
 
4401
                              nXBLANK:
4402 14 robfinch
 00FFFC43 0C6020                          ldb             #' '
4403
 00FFFC45 016FFF0CA                       lbra    OUTCH
4404 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4405 4 robfinch
 
4406 13 robfinch
                              ;------------------------------------------------------------------------------
4407
                              ; Dump Memory
4408
                              ;
4409
                              ; Usage:
4410 14 robfinch
                              ;       $D FFFC12 FFFC20
4411 13 robfinch
                              ;
4412
                              ; Dump formatted to look like:
4413
                              ;               :FFFC12 012 012 012 012 555 666 777 888
4414
                              ;
4415
                              ;------------------------------------------------------------------------------
4416 4 robfinch
 
4417 13 robfinch
                              DumpMemory:
4418 14 robfinch
 00FFFC48 08DE1C                          bsr             GetRange
4419
 00FFFC4A 18E000000                       ldy             #0
4420
 00FFFC4D 1BE000922                       ldy             mon_r1+2
4421 13 robfinch
                              dmpm2:
4422 14 robfinch
 00FFFC50 017FFD47F                       lbsr    CRLF
4423 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4424 14 robfinch
 00FFFC53 0C603A                          ldb             #':'
4425
 00FFFC55 017FFF0BA                       lbsr    OUTCH
4426 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4427 14 robfinch
 00FFFC58 01F020                          tfr             y,d
4428 13 robfinch
                                      ;addd   mon_r1+2                                        ; output the address
4429 14 robfinch
 00FFFC5A 017FFE7A4                       lbsr    DispWordAsHex
4430 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4431 14 robfinch
 00FFFC5D 0C6020                          ldb             #' '
4432
 00FFFC5F 017FFF0B0                       lbsr    OUTCH
4433 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4434 14 robfinch
 00FFFC62 08E000008                       ldx             #8                                                              ; number of bytes to display
4435 13 robfinch
                              dmpm1:
4436
                              ;       ldb             far [mon_r1+1],y
4437
                                      ;ldb            [mon_r1+2],y
4438 14 robfinch
 00FFFC65 0E6A04                          ldb             ,y
4439
 00FFFC67 031201                          iny
4440
 00FFFC69 017FFE79E                       lbsr    DispByteAsHex                   ; display byte
4441 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4442 14 robfinch
 00FFFC6C 0C6020                          ldb             #' '                                                    ; followed by a space
4443
 00FFFC6E 017FFF0A1                       lbsr    OUTCH
4444 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4445 14 robfinch
 00FFFC71 05F                             clrb
4446
 00FFFC72 04F                             clra
4447
 00FFFC73 017FFF064                       lbsr    INCH
4448 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4449 14 robfinch
 00FFFC76 0C1003                          cmpb    #CTRLC
4450
 00FFFC78 027024                          beq             dmpm3
4451
 00FFFC7A 0301FF                          dex
4452
 00FFFC7C 026FE7                          bne             dmpm1
4453 13 robfinch
                                      ; Now output ascii
4454 14 robfinch
 00FFFC7E 0C6020                          ldb             #' '
4455
 00FFFC80 017FFF08F                       lbsr    OUTCH
4456 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4457 14 robfinch
 00FFFC83 08E000008                       ldx             #8                                                              ; 8 chars to output
4458
 00FFFC86 0313F8                          leay    -8,y                                                    ; backup pointer
4459 13 robfinch
                              dmpm5:
4460
                              ;       ldb             far [mon_r1+1],y        ; get the char
4461
                              ;       ldb             [mon_r1+2],y                    ; get the char
4462 14 robfinch
 00FFFC88 0E6A04                          ldb             ,y
4463
 00FFFC8A 0C1020                          cmpb    #$20                                                    ; is it a control char?
4464
 00FFFC8C 024002                          bhs             dmpm4
4465
 00FFFC8E 0C602E                          ldb             #'.'
4466 13 robfinch
                              dmpm4:
4467 14 robfinch
 00FFFC90 017FFF07F                       lbsr    OUTCH
4468 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4469 14 robfinch
 00FFFC93 031201                          iny
4470
 00FFFC95 0301FF                          dex
4471
 00FFFC97 026FEF                          bne             dmpm5
4472
 00FFFC99 1BC000926                       cmpy    mon_r2+2
4473
 00FFFC9C 025FB2                          blo             dmpm2
4474 13 robfinch
                              dmpm3:
4475 14 robfinch
 00FFFC9E 017FFD431                       lbsr    CRLF
4476 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4477 14 robfinch
 00FFFCA1 016FFFC8A                       lbra    Monitor
4478 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4479
 
4480
                              ;------------------------------------------------------------------------------
4481 14 robfinch
                              ; Edit Memory
4482
                              ;
4483
                              ; Usage:
4484
                              ;       $$:FFFC12 8 "Hello World!" 0
4485
                              ;
4486
                              ; Dump formatted to look like:
4487
                              ;               :FFFC12 012 012 012 012 555 666 777 888
4488
                              ;
4489
                              ;------------------------------------------------------------------------------
4490
 
4491
                              EditMemory:
4492
 00FFFCA4 0CE000008                       ldu             #8                                              ; set max byte count
4493
 00FFFCA7 017FFFDE5                       lbsr    GetHexNumber    ; get the start address
4494
*** warning 1: Long branch within short branch range could be optimized
4495
 00FFFCAA 0BE000922                       ldx             mon_r1+2
4496
                              EditMem2:
4497
 00FFFCAD 017FFFD8C                       lbsr    ignBlanks                       ; skip over blanks
4498
*** warning 1: Long branch within short branch range could be optimized
4499
 00FFFCB0 017FFFDDC                       lbsr    GetHexNumber    ; get the byte value
4500
*** warning 1: Long branch within short branch range could be optimized
4501
 00FFFCB3 05D                             tstb                                                            ; check for valid value
4502
 00FFFCB4 02B00C                          bmi             EditMem1                        ; if invalid, quit
4503
 00FFFCB6 0F6000923                       ldb             mon_r1+3                        ; get value
4504
 00FFFCB9 0E7800                          stb             ,x+                                             ; update memory at address
4505
 00FFFCBB 0335FF                          leau    -1,u                                    ; decremeent byte count
4506
 00FFFCBD 283000000                       cmpu    #0
4507
 00FFFCC0 026FEB                          bne             EditMem2                        ; go back for annother byte
4508
                              EditMem1:
4509
 00FFFCC2 017FFFD6B                       lbsr    MonGetch                        ; see if a string is being entered
4510
*** warning 1: Long branch within short branch range could be optimized
4511
 00FFFCC5 0C1022                          cmpb    #'"'
4512
 00FFFCC7 026018                          bne             EditMem3                        ; no string, we're done
4513
 00FFFCC9 0CE000028                       ldu             #40                                             ; string must be less than 40 chars
4514
                              EditMem4:
4515
 00FFFCCC 017FFFD61                       lbsr    MonGetch                        ; look for close quote
4516
*** warning 1: Long branch within short branch range could be optimized
4517
 00FFFCCF 0C1022                          cmpb    #'"'
4518
 00FFFCD1 026005                          bne             EditMem6                        ; end of string?
4519
 00FFFCD3 0CE000008                       ldu             #8                                              ; reset the byte count
4520
 00FFFCD6 020FD5                          bra             EditMem2
4521
                              EditMem6:
4522
 00FFFCD8 0E7800                          stb             ,x+                                             ; store the character in memory
4523
 00FFFCDA 0335FF                          leau    -1,u                                    ; decrement byte count
4524
 00FFFCDC 283000000                       cmpu    #0
4525
 00FFFCDF 022FEB                          bhi             EditMem4                        ; max 40 chars
4526
                              EditMem3:
4527
 00FFFCE1 016FFFC4A                       lbra    Monitor
4528
*** warning 1: Long branch within short branch range could be optimized
4529
 
4530
 
4531
                              ;------------------------------------------------------------------------------
4532 13 robfinch
                              ; Dump Registers
4533
                              ;
4534
                              ;       Usage:
4535
                              ;               $DR
4536
                              ;------------------------------------------------------------------------------
4537
 
4538
                              DumpRegs:
4539 14 robfinch
 00FFFCE4 0CCFFFC05                       ldd             #msgRegHeadings
4540
 00FFFCE7 017FFE6CC                       lbsr    DisplayString
4541 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4542 14 robfinch
 00FFFCEA 08DF57                          bsr             nXBLANK
4543
 00FFFCEC 0FC000900                       ldd             mon_DSAVE
4544
 00FFFCEF 08DF4E                          bsr             nHEX4
4545
 00FFFCF1 08DF50                          bsr             nXBLANK
4546
 00FFFCF3 0FC000902                       ldd             mon_XSAVE
4547
 00FFFCF6 08DF47                          bsr             nHEX4
4548
 00FFFCF8 08DF49                          bsr             nXBLANK
4549
 00FFFCFA 0FC000904                       ldd             mon_YSAVE
4550
 00FFFCFD 08DF40                          bsr             nHEX4
4551
 00FFFCFF 08DF42                          bsr             nXBLANK
4552
 00FFFD01 0FC000906                       ldd             mon_USAVE
4553
 00FFFD04 08DF39                          bsr             nHEX4
4554
 00FFFD06 08DF3B                          bsr             nXBLANK
4555
 00FFFD08 0FC000908                       ldd             mon_SSAVE
4556
 00FFFD0B 08DF32                          bsr             nHEX4
4557
 00FFFD0D 08DF34                          bsr             nXBLANK
4558
 00FFFD0F 0F600090B                       ldb             mon_PCSAVE+1
4559
 00FFFD12 017FFE6F5                       lbsr    DispByteAsHex
4560 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4561 14 robfinch
 00FFFD15 0FC00090C                       ldd             mon_PCSAVE+2
4562
 00FFFD18 08DF25                          bsr             nHEX4
4563
 00FFFD1A 08DF27                          bsr             nXBLANK
4564
 00FFFD1C 0FC00090E                       ldd             mon_DPRSAVE
4565
 00FFFD1F 0BDFFD2CE                       jsr             HEX2
4566
 00FFFD22 08DF1F                          bsr             nXBLANK
4567
 00FFFD24 0B600090F                       lda             mon_CCRSAVE
4568
 00FFFD27 017FFD5A4                       lbsr    HEX2
4569 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4570 14 robfinch
 00FFFD2A 08DF17                          bsr             nXBLANK
4571
 00FFFD2C 016FFFBFF                       lbra    Monitor
4572 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4573
 
4574
                              ;------------------------------------------------------------------------------
4575 4 robfinch
                              ; Jump to code
4576 13 robfinch
                              ;
4577
                              ; Registers are loaded with values from the monitor register save area before
4578
                              ; the code is jumped to.
4579
                              ;
4580
                              ; J 
4581
                              ;------------------------------------------------------------------------------
4582
 
4583 4 robfinch
                              jump_to_code:
4584 14 robfinch
 00FFFD2F 08DD5E                          bsr             GetHexNumber
4585
 00FFFD31 01A010                          sei
4586
 00FFFD33 1FE000908                       lds             mon_SSAVE
4587
 00FFFD36 0CCFFFD6A                       ldd             #
4588
 00FFFD39 034006                          pshs    d
4589
 00FFFD3B 0C6000                          ldb             #>jtc_exit
4590
 00FFFD3D 034004                          pshs    b
4591
 00FFFD3F 0FC000912                       ldd             mon_numwka+2    ; get the address parameter
4592
 00FFFD42 034006                          pshs    d
4593
 00FFFD44 0F6000911                       ldb             mon_numwka+1
4594
 00FFFD47 034004                          pshs    b
4595
 00FFFD49 0FC000906                       ldd             mon_USAVE
4596
 00FFFD4C 034006                          pshs    d
4597
 00FFFD4E 0FC000904                       ldd             mon_YSAVE
4598
 00FFFD51 034006                          pshs    d
4599
 00FFFD53 0FC000902                       ldd             mon_XSAVE
4600
 00FFFD56 034006                          pshs    d
4601
 00FFFD58 0B600090E                       lda             mon_DPRSave
4602
 00FFFD5B 034002                          pshs    a
4603
 00FFFD5D 0FC000900                       ldd             mon_DSAVE
4604
 00FFFD60 034006                          pshs    d
4605
 00FFFD62 0B600090F                       lda             mon_CCRSAVE
4606
 00FFFD65 034002                          pshs    a
4607
 00FFFD67 0150350FF                       puls    far ccr,d,dpr,x,y,u,pc
4608 4 robfinch
                              jtc_exit:
4609 14 robfinch
 00FFFD6A 1FF000908                       sts             >mon_SSAVE              ; need to use extended addressing, no direct page setting
4610
 00FFFD6D 03280F006FFF                    leas    $6FFF                                   ; reset stack to system area, dont modify flags register!
4611
 00FFFD71 034001                          pshs    ccr                                             ; now the stack can be used
4612
 00FFFD73 034002                          pshs    a                                                       ; save acca register so we can use it
4613
 00FFFD75 01F0B8                          tfr             dpr,a                                   ; a = outgoing dpr value
4614
 00FFFD77 0B700090E                       sta             >mon_DPRSAVE    ; force extended addressing mode usage here dpr is not set
4615
 00FFFD7A 04F                             clra                                                            ; dpg register must be set to zero before values are
4616
 00FFFD7B 01F08B                          tfr             a,dpr                                   ; saved in the monitor register save area.
4617
 00FFFD7D 035002                          puls    a                                                       ; get back acca
4618
 00FFFD7F 0FD000900                       std             mon_DSAVE                       ; save regsters, can use direct addressing now
4619
 00FFFD82 0BF000902                       stx             mon_XSAVE
4620
 00FFFD85 1BF000904                       sty             mon_YSAVE
4621
 00FFFD88 0FF000906                       stu             mon_USAVE
4622
 00FFFD8B 035002                          puls    a                                                       ; get back ccr
4623
 00FFFD8D 0B700090F                       sta             mon_CCRSAVE             ; and save it too
4624 13 robfinch
                                      ; Reset vectors in case they got toasted.
4625 14 robfinch
 00FFFD90 0CCFFEBE4                       ldd             #SerialPeekCharDirect
4626
 00FFFD93 0FD000804                       std             CharInVec
4627
 00FFFD96 0CCFFE2F5                       ldd             #DisplayChar
4628
 00FFFD99 0FD000800                       std             CharOutVec
4629
 00FFFD9C 0FCFFFAF5                       ldd             DisplayErr
4630
 00FFFD9F 0FD00080C                       std             MonErrVec
4631 4 robfinch
                                      ; todo set according to coreid
4632 14 robfinch
 00FFFDA2 016FFFF3F                       lbra    DumpRegs                        ; now go do a register dump
4633 13 robfinch
*** warning 1: Long branch within short branch range could be optimized
4634 4 robfinch
 
4635
                              ;------------------------------------------------------------------------------
4636
                              ;------------------------------------------------------------------------------
4637 14 robfinch
 
4638
                              DumpIOFocusList:
4639
 00FFFDA5 08E000000                       ldx             #0
4640
                              dfl2:
4641
 00FFFDA8 0E680A000FF0000                 ldb             IOFocusList,x
4642
 00FFFDAD 0C1018                          cmpb    #24
4643
 00FFFDAF 02600A                          bne             dfl1
4644
 00FFFDB1 01F010                          tfr             x,d
4645
 00FFFDB3 017FFE654                       lbsr    DispByteAsHex
4646
*** warning 1: Long branch within short branch range could be optimized
4647
 00FFFDB6 0C6020                          ldb             #' '
4648
 00FFFDB8 017FFEF57                       lbsr    OUTCH
4649
*** warning 1: Long branch within short branch range could be optimized
4650
                              dfl1:
4651
 00FFFDBB 030001                          inx
4652
 00FFFDBD 08C000010                       cmpx    #16
4653
 00FFFDC0 025FE6                          blo             dfl2
4654
 00FFFDC2 017FFD30D                       lbsr    CRLF
4655
*** warning 1: Long branch within short branch range could be optimized
4656
 00FFFDC5 016FFFB66                       lbra    Monitor
4657
*** warning 1: Long branch within short branch range could be optimized
4658
 
4659
 
4660
                              ;------------------------------------------------------------------------------
4661
                              ;------------------------------------------------------------------------------
4662 4 robfinch
                              swi3_rout:
4663 14 robfinch
 00FFFDC8 01A010                          sei
4664
 00FFFDCA 035002                          puls    a
4665
 00FFFDCC 0B700090F                       sta             mon_CCRSAVE
4666
 00FFFDCF 03507E                          puls    D,DPR,X,Y,U
4667
 00FFFDD1 0FD000900                       std             mon_DSAVE
4668
 00FFFDD4 0BF000902                       stx             mon_XSAVE
4669
 00FFFDD7 1BF000904                       sty             mon_YSAVE
4670
 00FFFDDA 0FF000906                       stu             mon_USAVE
4671
 00FFFDDD 01F0B8                          tfr             dpr,a
4672
 00FFFDDF 0B700090E                       sta             mon_DPRSAVE
4673
 00FFFDE2 035002                          puls    a
4674
 00FFFDE4 0B700090A                       sta             mon_PCSAVE
4675
 00FFFDE7 035006                          puls    D
4676
 00FFFDE9 0FD00090B                       std             mon_PCSAVE+1
4677
 00FFFDEC 1FF000908                       sts             mon_SSAVE
4678
 00FFFDEF 1CE003FFF                       lds             #$3FFF
4679
 00FFFDF2 01C0EF                          cli
4680
 00FFFDF4 07EFFFCE4                       jmp             DumpRegs
4681 4 robfinch
                              swi3_exit:
4682 14 robfinch
 00FFFDF7 01A010                          sei
4683
 00FFFDF9 1FE000908                       lds             mon_SSAVE
4684
 00FFFDFC 0FC00090B                       ldd             mon_PCSAVE+1
4685
 00FFFDFF 034006                          pshs    d
4686
 00FFFE01 0B600090A                       lda             mon_PCSAVE
4687
 00FFFE04 034002                          pshs    a
4688
 00FFFE06 0FE000906                       ldu             mon_USAVE
4689
 00FFFE09 1BE000904                       ldy             mon_YSAVE
4690
 00FFFE0C 0BE000902                       ldx             mon_XSAVE
4691
 00FFFE0F 034070                          pshs    x,y,u
4692
 00FFFE11 0B600090E                       lda             mon_DPRSAVE
4693
 00FFFE14 034002                          pshs    a
4694
 00FFFE16 0FC000900                       ldd             mon_DSAVE
4695
 00FFFE19 034006                          pshs    d
4696
 00FFFE1B 0B600090F                       lda             mon_CCRSAVE
4697
 00FFFE1E 034002                          pshs    a
4698
 00FFFE20 01F08A                          tfr             a,ccr
4699
 00FFFE22 01C0EF                          cli
4700
 00FFFE24 03B                             rti
4701 4 robfinch
 
4702
                              ;------------------------------------------------------------------------------
4703
                              ;------------------------------------------------------------------------------
4704 13 robfinch
                              firq_rout:
4705 14 robfinch
 00FFFE25 03B                             rti
4706 13 robfinch
 
4707 4 robfinch
                              irq_rout:
4708 13 robfinch
                              ;       lbsr    SerialIRQ       ; check for recieved character
4709
                              ;       lbsr    TimerIRQ
4710
 
4711 4 robfinch
                                      ; Reset the edge sense circuit in the PIC
4712 14 robfinch
 00FFFE26 08601F                          lda             #31                                                     ; Timer is IRQ #31
4713
 00FFFE28 0B7FF0011                       sta             IrqSource               ; stuff a byte indicating the IRQ source for PEEK()
4714
 00FFFE2B 0150B7FFFE3F010                 sta             PIC+16                                  ; register 16 is edge sense reset reg
4715
 00FFFE30 0150B6FFFE6000D                 lda             VIA+VIA_IFR
4716
 00FFFE35 02A011                          bpl             notTimerIRQ2
4717
 00FFFE37 085800                          bita    #$800
4718
 00FFFE39 02700D                          beq             notTimerIRQ2
4719
 00FFFE3B 01507FFFFE60012                 clr             VIA+VIA_T3LL
4720
 00FFFE40 01507FFFFE60013                 clr             VIA+VIA_T3LH
4721
 00FFFE45 07CE00037                       inc             $E00037                                 ; update timer IRQ screen flag
4722 13 robfinch
                              notTimerIRQ2:
4723 4 robfinch
 
4724 14 robfinch
 00FFFE48 0B6FF0014                       lda             IrqBase                 ; get the IRQ flag byte
4725
 00FFFE4B 044                             lsra
4726
 00FFFE4C 0BAFF0014                       ora             IrqBase
4727
 00FFFE4F 0840E0                          anda    #$E0
4728
 00FFFE51 0B7FF0014                       sta             IrqBase
4729 4 robfinch
 
4730 13 robfinch
                              ;       inc             TEXTSCR+54              ; update IRQ live indicator on screen
4731 4 robfinch
 
4732
                                      ; flash the cursor
4733
                                      ; only bother to flash the cursor for the task with the IO focus.
4734 13 robfinch
                              ;       lda             COREID
4735
                              ;       cmpa    IOFocusID
4736
                              ;       bne             tr1a
4737
                              ;       lda             CursorFlash             ; test if we want a flashing cursor
4738
                              ;       beq             tr1a
4739
                              ;       lbsr    CalcScreenLoc   ; compute cursor location in memory
4740
                              ;       tfr             d,y
4741
                              ;       lda             $2000,y                 ; get color code $2000 higher in memory
4742
                              ;       ldb             IRQFlag                 ; get counter
4743
                              ;       lsrb
4744
                              ;       lsra
4745
                              ;       lsra
4746
                              ;       lsra
4747
                              ;       lsra
4748
                              ;       lsrb
4749
                              ;       rola
4750
                              ;       lsrb
4751
                              ;       rola
4752
                              ;       lsrb
4753
                              ;       rola
4754
                              ;       lsrb
4755
                              ;       rola
4756
                              ;       sta             $E00000,y               ; store the color code back to memory
4757
                              tr1a:
4758 14 robfinch
 00FFFE54 03B                             rti
4759 4 robfinch
 
4760
                              ;------------------------------------------------------------------------------
4761
                              ;------------------------------------------------------------------------------
4762
                              nmi_rout:
4763 14 robfinch
 00FFFE55 0150F6FFFFFFFE0                 ldb             COREID
4764
 00FFFE5A 086049                          lda             #'I'
4765
 00FFFE5C 08EE00028                       ldx             #TEXTSCR+40
4766
 00FFFE5F 0A788F                          sta             b,x
4767 13 robfinch
                              rti_insn:
4768 14 robfinch
 00FFFE61 03B                             rti
4769 4 robfinch
 
4770 13 robfinch
                              ; Special Register Area
4771
                                      org             $FFFFE0
4772
 
4773
                              ; Interrupt vector table
4774
 
4775 4 robfinch
                                      org             $FFFFF0
4776 14 robfinch
 00FFFFF0 FFFE61                          fcw             rti_insn                ; reserved
4777
 00FFFFF2 FFFDC8                          fcw             swi3_rout               ; SWI3
4778
 00FFFFF4 FFFE61                          fcw             rti_insn                ; SWI2
4779
 00FFFFF6 FFFE25                          fcw             firq_rout               ; FIRQ
4780
 00FFFFF8 FFFE26                          fcw             irq_rout                ; IRQ
4781 13 robfinch
 00FFFFFA FFE023                          fcw             start                           ; SWI
4782 14 robfinch
 00FFFFFC FFFE55                          fcw             nmi_rout                ; NMI
4783 13 robfinch
 00FFFFFE FFE023                          fcw             start                           ; RST
4784 4 robfinch
 
4785 14 robfinch
192 warning(s) in pass 2.
4786 4 robfinch
 
4787
SYMBOL TABLE
4788 13 robfinch
      ACIA 00 FFE30100  ACIA_CMD 00 00000002 ACIA_CTRL 00 00000003 ACIA_CTRL2 00 0000000B
4789 14 robfinch
   ACIA_RX 00 00000000 ACIA_STAT 00 00000001   ACIA_TX 00 00000000 ASCIITODECNYBBLE 02 00FFFAE7
4790
 ASCIITOHEXNYBBLE 02 00FFFABF    ASMBUF 00 00000160      ASMO 02 00FFF8BC     ASMOO 02 00FFF8C6
4791
  ASMOUTCH 02 00FFF8D0 BIOS_SCREENS 00 17000000 BLANKLINE 02 00FFE26C BLKCPYDST 00 00000020
4792
 BLKCPYSRC 00 0000001C   BLNKLN1 02 00FFE27F CALCSCREENLOC 02 00FFE2D2 CHARCOLOR 00 00000112
4793
 CHARINVEC 00 00000804 CHAROUTVEC 00 00000800 CHECKPOINT 02 00FFE129 CLEARSCREEN 02 00FFE225
4794
 CLEARSCREENJMP 02 00FFD300 CMDPROMPT 02 00FFF8E0 CMDPROMPTJI 00 00000808 COLORCODELOCATION 00 00000014
4795
 COPYSCREENTOVIRTUALSCREEN 02 00FFE1F5 COPYVIRTUALSCREENTOSCREEN 02 00FFE1BE    COREID 00 FFFFFFE0        CR 00 0000000D
4796
      CRLF 02 00FFD0D2     CRLF1 02 00FFD0D2    CRLFST 02 00FFE3F5       CS1 02 00FFE232
4797
       CS2 02 00FFE249     CS2V1 02 00FFE201       CS3 02 00FFE24F      CSL1 02 00FFE2ED
4798 13 robfinch
     CTRLC 00 00000003     CTRLH 00 00000008     CTRLI 00 00000009     CTRLJ 00 0000000A
4799
     CTRLK 00 0000000B     CTRLM 00 0000000D     CTRLS 00 00000013     CTRLT 00 00000014
4800
     CTRLX 00 00000018 CURSORCOL 00 00000111 CURSORFLASH 00 00000114 CURSORROW 00 00000110
4801 14 robfinch
     CV2S1 02 00FFE1D3      DAB1 02 00FFF8DF      DAB2 02 00FFF8D6 DBGCHECKFORKEY 02 00FFEA10
4802 13 robfinch
     DBGK1 02 00FFEA4B    DBGK10 02 00FFEAB0    DBGK11 02 00FFEB09    DBGK12 02 00FFEB0F
4803
    DBGK13 02 00FFEB1B    DBGK14 02 00FFEB2B    DBGK15 02 00FFEB3A    DBGK16 02 00FFEB45
4804
    DBGK17 02 00FFEB4E    DBGK18 02 00FFEB51     DBGK2 02 00FFEA16    DBGK20 02 00FFEA38
4805
    DBGK22 02 00FFEA54    DBGK23 02 00FFEA65    DBGK24 02 00FFEA46     DBGK3 02 00FFEA68
4806
     DBGK4 02 00FFEA74     DBGK5 02 00FFEA80     DBGK7 02 00FFEA90     DBGK8 02 00FFEA96
4807
     DBGK9 02 00FFEAAA DBGKNOTALT 02 00FFEB13 DBGKNOTCAPSLOCK 02 00FFEAE2 DBGKNOTCTRL 02 00FFEA9A
4808 14 robfinch
 DBGKNOTNUMLOCK 02 00FFEACB DBGKNOTRSHIFT 02 00FFEAB4 DBGKNOTSCROLLLOCK 02 00FFEAF9      DCCR 02 00FFE305
4809
      DCLF 02 00FFE38F     DCX10 02 00FFE33F     DCX11 02 00FFE34F     DCX12 02 00FFE34B
4810
     DCX13 02 00FFE35B     DCX14 02 00FFE302      DCX3 02 00FFE37D      DCX4 02 00FFE391
4811
      DCX5 02 00FFE36C      DCX6 02 00FFE316      DCX7 02 00FFE312      DCX8 02 00FFE323
4812
      DCX9 02 00FFE330   DELAY3S 02 00FFE1A1      DFL1 02 00FFFDBB      DFL2 02 00FFFDA8
4813
    DIRECT 00 00000001      DIS1 02 00FFF7EF     DIS10 02 00FFF572     DIS11 02 00FFF5AE
4814
     DIS12 02 00FFF5EB     DIS13 02 00FFF627     DIS14 02 00FFF668     DIS15 02 00FFF6A4
4815
     DIS16 02 00FFF6E1     DIS17 02 00FFF724     DIS18 02 00FFF76C     DIS19 02 00FFF81B
4816
      DIS2 02 00FFF411     DIS20 02 00FFF3DA     DIS21 02 00FFF40F     DIS23 02 00FFF3DD
4817
     DIS24 02 00FFF81E     DIS25 02 00FFF82B      DIS3 02 00FFF43A     DIS30 02 00FFF7BA
4818
      DIS4 02 00FFF457      DIS5 02 00FFF468      DIS6 02 00FFF49C      DIS7 02 00FFF4D3
4819
      DIS8 02 00FFF507      DIS9 02 00FFF53E  DISASSEM 02 00FFF3B4  DISLOOP1 02 00FFF3BF
4820
 DISNDXREG 02 00FFF874 DISNDXREGS 02 00FFF850 DISNEXTLINE 02 00FFF842   DISNOT9 02 00FFF44C
4821
 DISNOTAOFFS 02 00FFF5D6  DISNOTBO 02 00FFF613 DISNOTBOFFS 02 00FFF59A DISNOTDIRECT 02 00FFF40B
4822
 DISNOTDOFFS 02 00FFF6CC DISNOTEXT 02 00FFF7C4 DISNOTIMMB 02 00FFF7D5 DISNOTIMMW 02 00FFF7E5
4823
 DISNOTLREL 02 00FFF41B DISNOTNDX 02 00FFF7AD DISNOTPBO 02 00FFF710 DISNOTPTO 02 00FFF79B
4824
 DISNOTPWO 02 00FFF753   DISNOTR 02 00FFF55E DISNOTREL 02 00FFF424 DISNOTRMINUS 02 00FFF4F8
4825
 DISNOTRMINUSMINUS 02 00FFF52F DISNOTRPLUS 02 00FFF48D DISNOTRPLUSPLUS 02 00FFF4C4 DISNOTTFR 02 00FFF7EF
4826
  DISNOTTO 02 00FFF690  DISNOTWO 02 00FFF64F DISPBYTEASHEX 02 00FFE40A DISPDWORDASHEX 02 00FFE3F8
4827
 DISPLAYCHAR 02 00FFE2F5 DISPLAYERR 02 00FFFAF5 DISPLAYSTRING 02 00FFE3B6 DISPLAYSTRINGCRLF 02 00FFE3CD
4828
 DISPLAYSTRINGDX 02 00FFFAFE   DISPNYB 02 00FFE422  DISPNYB1 02 00FFE431 DISPWORDASHEX 02 00FFE401
4829 13 robfinch
   DISTBL1 02 00FFEDB4   DISTBL2 02 00FFF2B4   DISTBL3 02 00FFF2F4   DISTBL4 02 00FFF314
4830 14 robfinch
   DISTFR1 02 00FFF8A3 DISTFREXG 02 00FFF8A5 DISTFRREG 02 00FFF889 DISTFRREGS 02 00FFF854
4831
    DLY3S1 02 00FFE1A4    DLY3S2 02 00FFE1A8     DMPM1 02 00FFFC65     DMPM2 02 00FFFC50
4832
     DMPM3 02 00FFFC9E     DMPM4 02 00FFFC90     DMPM5 02 00FFFC88 DRAM_BASE 00 10000000
4833
    DSPJ1B 02 00FFE3BF     DSPJ2 02 00FFE3BA    DSRETB 02 00FFE3C8 DUMPASMBUF 02 00FFF8D3
4834
 DUMPIOFOCUSLIST 02 00FFFDA5 DUMPMEMORY 02 00FFFC48  DUMPREGS 02 00FFFCE4    DUMRTS 02 00FFE022
4835
  EDITMEM1 02 00FFFCC2  EDITMEM2 02 00FFFCAD  EDITMEM3 02 00FFFCE1  EDITMEM4 02 00FFFCCC
4836
  EDITMEM6 02 00FFFCD8 EDITMEMORY 02 00FFFCA4       EXT 00 00000006    FAREXT 00 00000008
4837
   FARFLAG 00 0000015F FIRQ_ROUT 02 00FFFE25 FIRST_CORE 00 00000001   FREEMBX 02 00000002
4838
   FREEMSG 02 00000006   FREETCB 00 0000078A GETHEXNUMBER 02 00FFFA8F    GETKEY 02 00FFEA12
4839
  GETRANGE 02 00FFFA66 GETSCREENLOCATION 02 00FFE286 GETTWOPARAMS 02 00FFFA45     GRNG1 02 00FFFA81
4840
      GSL1 02 00FFE294     GTDC3 02 00FFFAF2     GTHX3 02 00FFFAE4     GTHX5 02 00FFFACA
4841
     GTHX6 02 00FFFAD7    GTHXN1 02 00FFFABB    GTHXN2 02 00FFFA9C       HC1 02 00FFE2AE
4842
   HELPMSG 02 00FFFB0E      HEX2 02 00FFD2CE      HEX4 02 00FFD2D2 HOMECURSOR 02 00FFE298
4843
 HOMECURSORJMP 02 00FFD308     I2CW1 02 00FFE492    I2CWR1 02 00FFE4BF   I2C_CMD 00 00000004
4844
  I2C_CTRL 00 00000002  I2C_PREH 00 00000001  I2C_PREL 00 00000000   I2C_RXR 00 00000003
4845
  I2C_STAT 00 00000004   I2C_TXR 00 00000003 I2C_WAIT_RX_NACK 02 00FFE4BD I2C_WAIT_TIP 02 00FFE490
4846
 I2C_WR_CMD 02 00FFE49A      ICC1 02 00FFE3B2      ICC2 02 00FFE3B4      ICR1 02 00FFE3A4
4847
 IGNBLANKS 02 00FFFA3C IGNBLANKS1 02 00FFFA3C      IMMB 00 00000003      IMMW 00 00000007
4848
 INCCURSORPOS 02 00FFE393 INCCURSORROW 02 00FFE3A2      INCH 02 00FFECDA     INCH1 02 00FFECEF
4849
     INCH2 02 00FFECDC     INCHE 02 00FFECF8    INCHEK 02 00FFECFC   INCHEK1 02 00FFED11
4850
   INCHEK2 02 00FFED0E   INCHEK3 02 00FFED05      INIT 02 00FFE09A     INIT1 02 00FFE0A2
4851
 INITSERIAL 02 00FFEB6F IOFOCUSID 00 00FF0010 IOFOCUSLIST 00 00FF0000 IOFOCUSNDX 00 00000100
4852
   IRQBASE 00 00FF0014   IRQFLAG 00 00FF0012 IRQSOURCE 00 00FF0011  IRQ_ROUT 02 00FFFE26
4853
  JTC_EXIT 02 00FFFD6A JUMP_TO_CODE 02 00FFFD2F KBDBUFFULL 02 00FFEA0D   KBDFIFO 00 00000040
4854
 KBDFIFOALIAS 00 00C00040 KBDHEADRCV 00 00000127  KBDI0002 02 00FFE949  KBDI0004 02 00FFE98E
4855
 KBDITRYAGAIN 02 00FFE982 KBDRCVCOUNT 02 00FFE9BD KBDTAILRCV 00 00000128     KBGS1 02 00FFE8F8
4856
     KBGS2 02 00FFE8F0     KBGS3 02 00FFE8E1     KEYBD 00 FFE30400  KEYBDACK 00 FFFFCC00
4857
  KEYBDBAD 00 FFFFCB00 KEYBDBLOCK 00 00000126 KEYBDBUFFER 00 FFFFC000 KEYBDCHECKFORKEYDIRECT 02 00FFECD8
4858
 KEYBDCLOSE 02 00FFEB6B  KEYBDCLR 00 FFE30402 KEYBDCONTROLCODES 02 00FFE780 KEYBDECHO 00 FFFFCA00
4859
 KEYBDEXTENDEDCODES 02 00FFE800 KEYBDGETID 02 00FFE91C KEYBDGETSCANCODE 02 00FFE8FD KEYBDGETSTATUS 02 00FFE8E1
4860
 KEYBDHEAD 00 FFFFC800   KEYBDID 00 00000124 KEYBDINIT 02 00FFE940  KEYBDIRQ 02 00FFE9CF
4861
 KEYBDLOCKS 00 FFFFCD00 KEYBDOPEN 02 00FFEB6A KEYBDREAD 02 00FFEB6C KEYBDRECVBYTE 02 00FFE880
4862
 KEYBDSEEK 02 00FFEB6E KEYBDSENDBYTE 02 00FFE899 KEYBDSETLED 02 00FFE909 KEYBDTAIL 00 FFFFC900
4863
 KEYBDWAITTX 02 00FFE89F KEYBDWRITE 02 00FFEB6D    KEYLED 00 00000122 KEYSTATE1 00 00000120
4864
 KEYSTATE2 00 00000121     KGID1 02 00FFE939  KGNOTKBD 02 00FFE93C      KRB3 02 00FFE885
4865
      KRB4 02 00FFE895    KRCXIT 02 00FFE9CE      KWT1 02 00FFE8A4      KWT2 02 00FFE8B5
4866
      LEDS 00 FFE60001    LEDXIT 02 00FFE9A2    LETTER 02 00FFD2C1        LF 00 0000000A
4867
     LSREL 00 00000002 MAX_TASKNO 00 0000003F MONERRVEC 00 0000080C  MONGETCH 02 00FFFA30
4868
 MONGETNONSPACE 02 00FFFA35   MONITOR 02 00FFF92E MONITORSTART 02 00FFF910 MON_CCRSAVE 00 0000090F
4869
 MON_DPRSAVE 00 0000090E MON_DSAVE 00 00000900 MON_NUMWKA 00 00000910 MON_PCSAVE 00 0000090A
4870
    MON_R1 00 00000920    MON_R2 00 00000924 MON_SSAVE 00 00000908 MON_USAVE 00 00000906
4871
 MON_XSAVE 00 00000902 MON_YSAVE 00 00000904   MSCOUNT 00 FFFFFFE4 MSGBADKEYBD 02 00FFE9AE
4872
    MSGERR 02 00FFFB06 MSGF09STARTING 02 00FFF8EB MSGREGHEADINGS 02 00FFFC05 MSGSERIALTEST 02 00FFECC5
4873
 MSGSTARTUP 02 00FFE108 MULTI_SIEVE 02 00FFE13F MULTI_SIEVE1 02 00FFE162 MULTI_SIEVE2 02 00FFE15E
4874
 MULTI_SIEVE3 02 00FFE14C MULTI_SIEVE4 02 00FFE175       NDX 00 00000005     NHEX4 02 00FFFC3F
4875
  NMAILBOX 02 00000004 NMESERIAL 02 00FFEC8E   NMIBASE 00 00FF0013  NMI_ROUT 02 00FFFE55
4876
   NMSGBLK 02 00000008 NOTKBDIRQ 02 00FFEA0C  NOTRXINT 02 00FFEC8D NOTTIMERIRQ 02 00FFE485
4877
 NOTTIMERIRQ2 02 00FFFE48   NXBLANK 02 00FFFC43    ONEKEY 02 00FFD1DC      OSC1 02 00FFED59
4878
    OSCALL 02 00FFED59 OSCALLTBL 02 00FFED27      OSCX 02 00FFED69    OSSEMA 00 00EF0010
4879
     OUTCH 02 00FFED12   OUTSEMA 00 00EF0000     PCRLF 02 00FFE3E1     PDATA 02 00FFE3EE
4880
       PIC 00 FFE3F000    PICPTR 00 00000028     PRINT 02 00FFE3EB   PROMPT1 02 00FFF95B
4881
   PROMPT2 02 00FFF987  PROMPT2A 02 00FFF9A5   PROMPT3 02 00FFF94C   PROMPTC 02 00FFF9C3
4882
 PROMPTCOLON 02 00FFF9DB   PROMPTD 02 00FFF9CF   PROMPTF 02 00FFF9E2  PROMPTFL 02 00FFF9F5
4883
 PROMPTHELP 02 00FFF9B7   PROMPTJ 02 00FFF9FC  PROMPTLN 02 00FFF948   PROMPTR 02 00FFFA01
4884
   PROMPTT 02 00FFFA14   PROMPTU 02 00FFFA29  PROMPT_S 02 00FFFA0B    PSTRNG 02 00FFE3DD
4885 13 robfinch
     QNDX0 00 00000780     QNDX1 00 00000782     QNDX2 00 00000784     QNDX3 00 00000786
4886
     QNDX4 00 00000788    RAMERR 02 00FFD42C   RAMTEST 02 00FFD400  RAMTEST1 02 00FFD40D
4887
  RAMTEST3 02 00FFD417 RELEASEIOFOCUS 02 00FFED84 REQUESTIOFOCUS 02 00FFED6D     RIOF1 02 00FFEDAB
4888 14 robfinch
     RIOF2 02 00FFED9A  ROMTORAM 02 00FFE12F ROMTORAM1 02 00FFE135       RTC 00 FFE30500
4889
    RTCBUF 00 00007FC0  RTCR0001 02 00FFE4ED  RTCW0001 02 00FFE538  RTC_READ 02 00FFE4C7
4890
 RTC_RXERR 02 00FFE516 RTC_WRITE 02 00FFE51A  RTI_INSN 02 00FFFE61 RUNNINGID 00 00800000
4891 13 robfinch
 RUNNINGTCB 06 00000000 SCREENCOLOR 00 00000113 SCREENLOCATION 00 00000010 SCREENLOCATION2 00 00000018
4892 14 robfinch
  SCROLLUP 02 00FFE251    SCRUP1 02 00FFE25E    SC_ALT 00 00000011      SC_C 00 00000021
4893 13 robfinch
 SC_CAPSLOCK 00 00000058   SC_CTRL 00 00000014    SC_DEL 00 00000071 SC_EXTEND 00 000000E0
4894
    SC_F12 00 00000007  SC_KEYUP 00 000000F0 SC_NUMLOCK 00 00000077 SC_RSHIFT 00 00000059
4895
 SC_SCROLLLOCK 00 0000007E      SC_T 00 0000002C    SC_TAB 00 0000000D      SC_Z 00 0000001A
4896
   SEMAABS 00 00001000 SERHEADRCV 00 00000131 SERHEADXMIT 00 00000136  SERHZERO 00 00000130
4897
 SERIALGETCHAR 02 00FFEB9D SERIALINIT 02 00FFEB6F SERIALIRQ 02 00FFEC3B SERIALOUTPUTTEST 02 00FFECA5
4898
 SERIALPEEKCHAR 02 00FFEBCD SERIALPEEKCHARDIRECT 02 00FFEBE4 SERIALPUTCHAR 02 00FFEC08 SERIALPUTSTRING 02 00FFEC95
4899
 SERIALRCVCOUNT 02 00FFEC28 SERRCVBUF 00 00BFF000 SERRCVXOFF 00 00000140 SERRCVXON 00 00000139
4900
 SERTAILRCV 00 00000133 SERTAILXMIT 00 00000138  SERTZERO 00 00000132 SETKEYBOARDECHO 02 00FFED16
4901
      SGC2 02 00FFEBB6 SGCNOCHARS 02 00FFEBC6    SGCXIT 02 00FFEBC9 SHIFTEDSCANCODES 02 00FFE680
4902 14 robfinch
 SHIFTLEFT5 02 00FFE1B3 SHL_NUMWKA 02 00FFFA82 SHOWSPRITES 02 00FFED1C     SIEVE 02 00FFE179
4903
    SIEVE1 02 00FFE191    SIEVE2 02 00FFE18D    SIEVE3 02 00FFE17E    SIEVE4 02 00FFE1A0
4904 13 robfinch
     SINI1 02 00FFEB82  SIRQ0001 02 00FFEC4D SIRQNXTBYTE 02 00FFEC3B SIRQRXFULL 02 00FFEC8D
4905 14 robfinch
 SKIPDOLLAR 02 00FFF97A SKIP_INIT 02 00FFE0D5    SOTST1 02 00FFECAF   SPC0001 02 00FFEC0A
4906 13 robfinch
  SPCD0001 02 00FFEC02 SPCNOCHARS 02 00FFEBDF    SPCXIT 02 00FFEBE2 SPRITE_CTRL 00 FFE10000
4907
 SPRITE_EN 00 000003C0      SPS2 02 00FFEC99    SPSXIT 02 00FFECA3    SRCXIT 02 00FFEC3A
4908 14 robfinch
      SREL 00 00000004       ST1 02 00FFE0B4       ST3 02 00FFE091       ST6 02 00FFE03C
4909
       ST7 02 00FFE046       ST8 02 00FFE046       ST9 02 00FFE05A     START 02 00FFE023
4910
    STRPTR 00 00000024 SWI3_EXIT 02 00FFFDF7 SWI3_ROUT 02 00FFFDC8       TAB 00 00000009
4911
 TCB_CURSORCOL 00 00000021 TCB_CURSORROW 00 00000020  TCB_HJCB 00 0000001C TCB_HWAITMBX 00 00000022
4912
 TCB_IOF_NEXT 00 0000002C TCB_IOF_PREV 00 00000030 TCB_MBQ_NEXT 00 00000024 TCB_MBQ_PREV 00 00000028
4913
 TCB_MMU_MAP 00 00000038 TCB_MSGPTR_D1 00 00000014 TCB_MSGPTR_D2 00 00000018 TCB_NXTRDY 00 00000000
4914
 TCB_NXTTCB 00 00000008 TCB_PRIORITY 00 00000010 TCB_PRVRDY 00 00000004 TCB_SPSAVE 00 00000034
4915
 TCB_STATUS 00 0000001E TCB_TIMEOUT 00 0000000C TEXTCLOSE 02 00FFE221  TEXTOPEN 02 00FFE220
4916
  TEXTREAD 02 00FFE222   TEXTREG 00 FFE0DF00   TEXTSCR 00 FFE00000  TEXTSEEK 02 00FFE224
4917
 TEXTWRITE 02 00FFE223 TEXT_COLS 00 00000000 TEXT_CURPOS 00 00000022 TEXT_ROWS 00 00000001
4918
    TFREXG 00 00000009 TIMEOUTLIST 00 0000078C TIMERINIT 02 00FFE438  TIMERIRQ 02 00FFE463
4919
      TR1A 02 00FFFE54      UCP1 02 00FFE2D0 UNSHIFTEDSCANCODES 02 00FFE580 UPDATECURSORPOS 02 00FFE2B0
4920
       VIA 00 FFE60000   VIA_ACR 00 0000000B  VIA_DDRA 00 00000003   VIA_IER 00 0000000E
4921
   VIA_IFR 00 0000000D    VIA_PA 00 00000001 VIA_T3CMPH 00 00000015 VIA_T3CMPL 00 00000014
4922
  VIA_T3LH 00 00000013  VIA_T3LL 00 00000012  W10_0001 02 00FFE8C0 W300_0001 02 00FFE8D4
4923
  WAIT10MS 02 00FFE8B9 WAIT300MS 02 00FFE8CD    XBLANK 02 00FFD0AF      XOFF 00 00000013
4924
       XON 00 00000011
4925
545 SYMBOLS
4926 4 robfinch
 
4927 14 robfinch
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.