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

Subversion Repositories rf6809

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

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

Line No. Rev Author Line
1 4 robfinch
 
2
                              ; ============================================================================
3
                              ;        __
4
                              ;   \\__/ o\    (C) 2013-2022  Robert Finch, Stratford
5
                              ;    \  __ /    All rights reserved.
6
                              ;     \/_//     robfinch@opencores.org
7
                              ;       ||
8
                              ;
9
                              ;
10
                              ; This source file is free software: you can redistribute it and/or modify
11
                              ; it under the terms of the GNU Lesser General Public License as published
12
                              ; by the Free Software Foundation, either version 3 of the License, or
13
                              ; (at your option) any later version.
14
                              ;
15
                              ; This source file is distributed in the hope that it will be useful,
16
                              ; but WITHOUT ANY WARRANTY; without even the implied warranty of
17
                              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
                              ; GNU General Public License for more details.
19
                              ;
20
                              ; You should have received a copy of the GNU General Public License
21
                              ; along with this program.  If not, see .
22
                              ;
23
                              ; ============================================================================
24
                              ;
25
                              CR      EQU     $0D             ;ASCII equates
26
                              LF      EQU     $0A
27
                              TAB     EQU     $09
28
                              CTRLC   EQU     $03
29
                              CTRLH   EQU     $08
30
                              CTRLI   EQU     $09
31
                              CTRLJ   EQU     $0A
32
                              CTRLK   EQU     $0B
33
                              CTRLM   EQU $0D
34
                              CTRLS   EQU     $13
35
                              CTRLX   EQU     $18
36
                              XON             EQU     $11
37
                              XOFF    EQU     $13
38
 
39
                              FIRST_CORE      EQU     1
40
                              MAX_TASKNO      EQU 63
41
                              DRAM_BASE       EQU $10000000
42
 
43
                              ScreenLocation          EQU             $10
44
                              ColorCodeLocation       EQU             $14
45
                              ScreenLocation2         EQU             $18
46
                              BlkcpySrc                       EQU             $1C
47
                              BlkcpyDst                       EQU             $20
48
                              Strptr                          EQU             $24
49
                              PICptr                          EQU             $28
50
                              ; Forth Area
51
                              ; 0x30-0x60
52
 
53
                              RunningID                       EQU             $800000
54
 
55
                              ; Task control blocks, room for 256 tasks
56
                              TCB_NxtRdy              EQU             $00     ; next task on ready / timeout list
57
                              TCB_PrvRdy              EQU             $04     ; previous task on ready / timeout list
58
                              TCB_NxtTCB              EQU             $08
59
                              TCB_Timeout             EQU             $0C
60
                              TCB_Priority    EQU             $10
61
                              TCB_MSGPTR_D1   EQU             $14
62
                              TCB_MSGPTR_D2   EQU             $18
63
                              TCB_hJCB                        EQU             $1C
64
                              TCB_Status              EQU             $1E
65
                              TCB_CursorRow   EQU             $20
66
                              TCB_CursorCol   EQU             $21
67
                              TCB_hWaitMbx    EQU             $22     ; handle of mailbox task is waiting at
68
                              TCB_mbq_next    EQU             $24     ; mailbox queue next
69
                              TCB_mbq_prev    EQU             $28     ; mailbox queue previous
70
                              TCB_iof_next    EQU             $2C
71
                              TCB_iof_prev    EQU             $30
72
                              TCB_SPSave              EQU             $34     ; TCB_SPSave area
73
                              TCB_mmu_map             EQU             $38
74
 
75
                              KeybdHead               EQU             $FFFFFC800
76
                              KeybdTail               EQU             $FFFFFC900
77
                              KeybdEcho               EQU             $FFFFFCA00
78
                              KeybdBad                EQU             $FFFFFCB00
79
                              KeybdAck                EQU             $FFFFFCC00
80
                              KeybdLocks              EQU             $FFFFFCD00
81
                              KeybdBuffer             EQU             $FFFFFC000      ; buffer is 16 chars
82
 
83
                              COREID  EQU             $FFFFFFFE0
84
                              MSCOUNT EQU             $FFFFFFFE4
85
                              LEDS            EQU             $FFFE60000
86
                              TEXTSCR         EQU             $FFFE00000
87
                              TEXTREG         EQU             $FFFE0DF00
88
                              TEXT_COLS       EQU             0
89
                              TEXT_ROWS       EQU             1
90
                              TEXT_CURPOS     EQU             34
91
                              KEYBD           EQU             $FFFE30400
92
                              KEYBDCLR        EQU             $FFFE30402
93
                              PIC                     EQU             $FFFE3F000
94
                              SPRITE_CTRL             EQU             $FFFE10000
95
                              SPRITE_EN                       EQU             $3C0
96
 
97
                              BIOS_SCREENS    EQU     $17000000       ; $17000000 to $171FFFFF
98
 
99
                              ; EhBASIC vars:
100
                              ;
101
                              NmiBase         EQU             $DC
102
                              IrqBase         EQU             $DF
103
 
104
                              ; The IO focus list is a doubly linked list formed into a ring.
105
                              ;
106
                              IOFocusNdx      EQU             $100
107
                              IOFocusID               EQU             $100
108
 
109
                              ; These variables use direct page access
110
                              CursorRow       EQU             $110
111
                              CursorCol       EQU             $111
112
                              CharColor       EQU             $112
113
                              ScreenColor     EQU             $113
114
                              CursorFlash     EQU             $114
115
                              KeyState1       EQU     $120
116
                              KeyState2       EQU     $121
117
                              KeyLED          EQU     $122
118
                              KeybdID         EQU     $124
119
 
120
                              QNdx0           EQU             $780
121
                              QNdx1           EQU             QNdx0+2
122
                              QNdx2           EQU             QNdx1+2
123
                              QNdx3           EQU             QNdx2+2
124
                              QNdx4           EQU             QNdx3+2
125
                              FreeTCB         EQU             QNdx4+2
126
                              TimeoutList     EQU             FreeTCB+2
127
                              FreeMbx         EQU             RunningTCB + 2
128
                              nMailbox        EQU             FreeMbx + 2
129
                              FreeMsg         EQU             nMailbox + 2
130
                              nMsgBlk         EQU             FreeMsg + 2
131
 
132
                              IrqSource       EQU             $79A
133
 
134
                              IRQFlag         EQU             $7C6
135
 
136
                              CharOutVec      EQU             $800
137
                              CharInVec       EQU             $804
138
 
139
                              ; Register save area for monitor
140
                              mon_DSAVE       EQU             $900
141
                              mon_XSAVE       EQU             $902
142
                              mon_YSAVE       EQU             $904
143
                              mon_USAVE       EQU             $906
144
                              mon_SSAVE       EQU             $908
145
                              mon_PCSAVE      EQU             $90A
146
                              mon_DPRSAVE     EQU             $90E
147
                              mon_CCRSAVE     EQU             $90F
148
 
149
                              mon_numwka      EQU             $910
150
                              mon_r1          EQU             $920
151
                              mon_r2          EQU             $922
152
 
153
                              ; The ORG directive must set an address a multiple of 4 in order for the Verilog
154
                              ; output to work correctly.
155
 
156
                                      org             $FFD0AC
157
 00FFD0AC 012                             nop
158
 00FFD0AD 012                             nop
159
 00FFD0AE 012                             nop
160
                              XBLANK
161
 00FFD0AF 0C6020                          ldb             #' '
162
 00FFD0B1 0170028C8                       lbsr    OUTCH
163
 00FFD0B4 039                             rts
164
 
165
                                      org             $FFD0D0
166
 00FFD0D0 012                             nop
167
 00FFD0D1 012                             nop
168
                              CRLF
169
                              CRLF1:
170
 00FFD0D2 0C600D                          ldb             #CR
171
 00FFD0D4 0170028A5                       lbsr    OUTCH
172
 00FFD0D7 0C600A                          ldb             #LF
173
 00FFD0D9 0170028A0                       lbsr    OUTCH
174
 00FFD0DC 039                             rts
175
 
176
                                      org             $FFD0F0
177
 00FFD0F0 012                             nop
178
 00FFD0F1 020FDF                          bra             CRLF1
179
 
180
                                      org             $FFD1DC
181
                              ONEKEY
182
 00FFD1DC 06E90F000804                    jmp             [CharInVec]
183
 
184
                                      org             $FFD2C0
185
 00FFD2C0 012                             nop
186
                              LETTER
187
 00FFD2C1 0170026B8                       lbsr    OUTCH
188
 00FFD2C4 039                             rts
189
 
190
                                      org             $FFD2CC
191
 00FFD2CC 012                             nop
192
 00FFD2CD 012                             nop
193
                              HEX2
194
 00FFD2CE 0170020CC                       lbsr    DispByteAsHex
195
 00FFD2D1 039                             rts
196
                              HEX4
197
 00FFD2D2 0170020BF                       lbsr    DispWordAsHex
198
 00FFD2D5 039                             rts
199
 
200
                                      org             $FFD300
201
                              ClearScreenJmp
202
 00FFD300 016001ECD                       lbra    ClearScreen
203
                                      org             $FFD308
204
                              HomeCursorJmp
205
 00FFD308 016001F36                       lbra    HomeCursor
206
 
207
                                      org             $FFE000
208
 
209
                              ; Local RAM test routine
210
                              ; Checkerboard testing.
211
                              ; There is 70kB of local RAM
212
                              ; Does not use any RAM including no stack
213
 
214
                              ramtest:
215
 00FFE000 18E000000                       ldy             #0
216
 00FFE003 086001                          lda             #1
217
 00FFE005 0150B7FFFE60000                 sta             LEDS
218
 00FFE00A 0CCAAA555                       ldd             #$AAA555
219
                              ramtest1:
220
 00FFE00D 0EDA01                          std             ,y++
221
 00FFE00F 18CC00000                       cmpy    #$C00000
222
 00FFE012 025FF9                          blo             ramtest1
223
                                      ; now readback values and compare
224
 00FFE014 18E000000                       ldy             #0
225
                              ramtest3:
226
 00FFE017 0ECA01                          ldd             ,y++
227
 00FFE019 183AAA555                       cmpd    #$AAA555
228
 00FFE01C 02600E                          bne             ramerr
229
 00FFE01E 18CC00000                       cmpy    #$C00000
230
 00FFE021 025FF4                          blo             ramtest3
231
 00FFE023 086002                          lda             #2
232
 00FFE025 0150B7FFFE60000                 sta             LEDS
233
 00FFE02A 06EC04                          jmp             ,u
234
                              ramerr:
235
 00FFE02C 086080                          lda             #$80
236
 00FFE02E 0150B7FFFE60000                 sta             LEDS
237
 00FFE033 08EE00000                       ldx             #TEXTSCR
238
 00FFE036 0150F6FFFFFFFE0                 ldb             COREID
239
 00FFE03B 03A                             abx
240
 00FFE03C 086046                          lda             #'F'
241
 00FFE03E 0A7804                          sta             ,x
242
 00FFE040 013                             sync
243
 00FFE041 06EC04                          jmp             ,u
244
 
245
                                      org             $FFF000
246
 00FFF000 FFF996                          FDB Monitor
247
 00FFF002 FFF022                          FDB DumRts      ;       NEXTCMD
248
 00FFF004 FFF95E                          FDB INCH
249
 00FFF006 FFF963                          FDB INCHE
250
 00FFF008 FFF967                          FDB INCHEK
251
 00FFF00A FFF97C                          FDB OUTCH
252
 00FFF00C FFF381                          FDB PDATA
253
 00FFF00E FFF374                          FDB PCRLF
254
 00FFF010 FFF370                          FDB PSTRNG
255
 00FFF012 FFF022                          FDB DumRts                      ; LRA
256
 00FFF014 FFF022                          FDB DumRts
257
 00FFF016 FFF022                          FDB DumRts
258
 00FFF018 FFF022                          FDB DumRts
259
 00FFF01A FFF022                          FDB DumRts                      ; VINIZ
260
 00FFF01C FFF29B                          FDB DisplayChar ;       VOUTCH
261
 00FFF01E FFF022                          FDB DumRts                      ; ACINIZ
262
 00FFF020 FFF022                          FDB DumRts                      ; AOUTCH
263
 
264
                              DumRts:
265
 00FFF022 039                             rts
266
 
267
                              ;------------------------------------------------------------------------------
268
                              ;------------------------------------------------------------------------------
269
 
270
                              start:
271
 00FFF023 086055                          lda             #$55                    ; see if we can at least set LEDs
272
 00FFF025 0150B7FFFE60000                 sta             LEDS
273
 00FFF02A 0CEFFF030                       ldu             #st6                    ; U = return address
274
 00FFF02D 07EFFE000                       jmp             ramtest         ; JMP dont JSR
275
                              st6:
276
 00FFF030 1CE003FFF                       lds             #$3FFF          ; boot up stack area
277
 00FFF033 0150B6FFFFFFFE0                 lda             COREID
278
 00FFF038 081001                          cmpa    #FIRST_CORE
279
                              ;       beq             st8
280
                              ;       sync                                            ; halt cores other than 2
281
                              st8:
282
                              ;       bne             skip_init
283
                              ;       bsr             romToRam
284
                              ;       ldd             #st7 & $FFFF
285
                              ;       tfr             d,x
286
                              ;       jmp             ,x                              ; jump to the BIOS now in local RAM
287
                              st7:
288
 00FFF03A 08D11F                          bsr             Delay3s         ; give some time for devices to reset
289
 00FFF03C 0860AA                          lda             #$AA
290
 00FFF03E 0150B7FFFE60000                 sta             LEDS
291
 00FFF043 086002                          lda             #2
292
 00FFF045 097100                          sta             IOFocusID       ; core #2 has focus
293
 00FFF047 0B7800000                       sta             RunningID
294
 00FFF04A 0860CE                          lda             #$0CE
295
 00FFF04C 097113                          sta             ScreenColor
296
 00FFF04E 097112                          sta             CharColor
297
 00FFF050 08D17E                          bsr             ClearScreen
298
 00FFF052 0CCFFF29B                       ldd             #DisplayChar
299
 00FFF055 0DD800                          std             CharOutVec
300
 00FFF057 0CCFFF83B                       ldd             #DBGGetKey
301
 00FFF05A 0DD804                          std             CharInVec
302
 00FFF05C 0150F6FFFFFFFE0                 ldb             COREID
303
 00FFF061 0C1001                          cmpb    #FIRST_CORE
304
 00FFF063 02700D                          beq             init
305
 00FFF065 020025                          bra             skip_init
306
 00FFF067 02008D                          bra             multi_sieve
307
                              st3:
308
 00FFF069 0860FF                          lda             #$FF
309
 00FFF06B 0150B7FFFE60000                 sta             LEDS
310
 00FFF070 020FF7                          bra             st3
311
 
312
                                      ; initialize interrupt controller
313
                                      ; first, zero out all the vectors
314
                              init:
315
 00FFF072 08E000080                       ldx             #128
316
 00FFF075 086001                          lda             #1                      ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7)
317
 00FFF077 0C6001                          ldb             #FIRST_CORE                     ; serving core id
318
                              st1:
319
 00FFF079 06F809E3F000                    clr             PIC,x           ; cause code
320
 00FFF07D 0A7809E3F001                    sta             PIC+1,x
321
 00FFF081 0E7809E3F002                    stb             PIC+2,x
322
 00FFF085 030004                          leax    4,x
323
 00FFF087 08C000100                       cmpx    #256
324
 00FFF08A 025FED                          blo             st1
325
                              ;       lda             #4                              ; make the timer interrupt edge sensitive
326
                              ;       sta             PIC+4                   ; reg #4 is the edge sensitivity setting
327
                              ;       sta             PIC                             ; reg #0 is interrupt enable
328
 
329
                              skip_init:
330
 00FFF08C 01C0EF                          andcc   #$EF                    ; unmask irq
331
 00FFF08E 086038                          lda             #56
332
 00FFF090 0150B7FFFE0DF00                 sta             TEXTREG+TEXT_COLS
333
 00FFF095 08601D                          lda             #29
334
 00FFF097 0150B7FFFE0DF01                 sta             TEXTREG+TEXT_ROWS
335
 00FFF09C 08D132                          bsr             ClearScreen
336
 00FFF09E 08D1A1                          bsr             HomeCursor
337
 00FFF0A0 086005                          lda             #5
338
 00FFF0A2 0150B7FFFE60000                 sta             LEDS
339
 00FFF0A7 0CCFFF0BF                       ldd             #msgStartup
340
 00FFF0AA 08D2A8                          bsr             DisplayString
341
 00FFF0AC 08E000000                       ldx             #0
342
 00FFF0AF 0CC000000                       ldd             #0
343
 00FFF0B2 0170008D1                       lbsr    ShowSprites
344
 00FFF0B5 017000708                       lbsr    KeybdInit
345
 00FFF0B8 0DC124                          ldd             KeybdID
346
 00FFF0BA 08D2D8                          bsr             DispWordAsHex
347
 00FFF0BC 07EFFF991                       jmp             MonitorStart
348
 
349
                              msgStartup
350
 00FFF0BF 072066036038030039020           fcb             "rf6809 12-bit System Starting.",CR,LF,0
351
 00FFF0C6 03103202D062069074020
352
 00FFF0CD 05307907307406506D020
353
 00FFF0D4 05307406107207406906E
354
 00FFF0DB 06702E00D00A000
355
 
356
                              ;------------------------------------------------------------------------------
357
                              ; The checkpoint register must be cleared within 1 second or a NMI interrupt
358
                              ; will occur. checkpoint should be called with a JSR so that the global ROM
359
                              ; routine is called.
360
                              ;
361
                              ; Modifies:
362
                              ;               none
363
                              ;------------------------------------------------------------------------------
364
 
365
                              checkpoint:
366
 00FFF0E0 01507FFFFFFFFE1                 clr             $FFFFFFFE1      ; writing any value will do
367
 00FFF0E5 039                             rts
368
 
369
                              ;------------------------------------------------------------------------------
370
                              ; Copy the system ROM to local RAM
371
                              ; Running the code from local RAM is probably an order of magnitude faster
372
                              ; then running from the global ROM. It also reduces the network traffic to
373
                              ; run from local RAM.
374
                              ;
375
                              ; Modifies:
376
                              ;               d,x,y
377
                              ;------------------------------------------------------------------------------
378
 
379
                              romToRam:
380
 00FFF0E6 08EFFC000                       ldx             #$FFC000
381
 00FFF0E9 18E00C000                       ldy             #$00C000
382
                              romToRam1:
383
 00FFF0EC 0EC801                          ldd             ,x++
384
 00FFF0EE 0EDA01                          std             ,y++
385
 00FFF0F0 08C000000                       cmpx    #0
386
 00FFF0F3 026FF7                          bne             romToRam1
387
 00FFF0F5 039                             rts
388
 
389
                              ;------------------------------------------------------------------------------
390
                              ; Multi-core sieve program.
391
                              ;------------------------------------------------------------------------------
392
 
393
                              ; First fill screen chars with 'P' indicating prime positions
394
                              ; Each core is responsible for the Nth position where N is the
395
                              ; core number minus two.
396
                              ;
397
                              multi_sieve:
398
 00FFF0F6 086050                          lda             #'P'                                    ; indicate prime
399
 00FFF0F8 0150F6FFFFFFFE0                 ldb             COREID                          ; find out which core we are
400
 00FFF0FD 0C0001                          subb    #FIRST_CORE
401
 00FFF0FF 08E000000                       ldx             #0                                              ; start at first char of screen
402
 00FFF102 03A                             abx
403
                              multi_sieve3:
404
 00FFF103 0A7809E00000                    sta             TEXTSCR,x                       ; store 'P'
405
 00FFF107 030008                          leax    8,x                                             ; advance to next position
406
 00FFF109 08C000FFF                       cmpx    #4095
407
 00FFF10C 025FF5                          blo             multi_sieve3
408
 00FFF10E 0BDFFF0E0                       jsr             checkpoint
409
*** warning 1: Long branch within short branch range could be optimized
410
 00FFF111 0CB002                          addb    #2                                              ; start sieve at 2 (core id)
411
 00FFF113 08604E                          lda             #'N'                                    ; flag position value of 'N' for non-prime
412
                              multi_sieve2:
413
 00FFF115 08E000000                       ldx             #0
414
 00FFF118 03A                             abx                                                                     ; skip the first position - might be prime
415
                              multi_sieve1:
416
 00FFF119 03A                             abx                                                                     ; increment
417
 00FFF11A 0A7809E00000                    sta             TEXTSCR,x
418
 00FFF11E 08C000FFF                       cmpx    #4095
419
 00FFF121 025FF6                          blo             multi_sieve1
420
 00FFF123 0BDFFF0E0                       jsr             checkpoint
421
*** warning 1: Long branch within short branch range could be optimized
422
 00FFF126 0CB008                          addb    #8                                              ; number of cores working on it
423
 00FFF128 0C1FF0                          cmpb    #4080
424
 00FFF12A 025FE9                          blo             multi_sieve2
425
                              multi_sieve4:                                   ; hang machine
426
 00FFF12C 013                             sync
427
 00FFF12D 016000866                       lbra    Monitor
428
 
429
                              sieve:
430
 00FFF130 086050                          lda             #'P'                                    ; indicate prime
431
 00FFF132 08E000000                       ldx             #0                                              ; start at first char of screen
432
                              sieve3:
433
 00FFF135 0A7809E00000                    sta             TEXTSCR,x                       ; store 'P'
434
 00FFF139 030001                          inx                                                                     ; advance to next position
435
 00FFF13B 08C000FFF                       cmpx    #4095
436
 00FFF13E 025FF5                          blo             sieve3
437
 00FFF140 0C6002                          ldb             #2                                              ; start sieve at 2
438
 00FFF142 08604E                          lda             #'N'                                    ; flag position value of 'N' for non-prime
439
                              sieve2:
440
 00FFF144 08E000000                       ldx             #0
441
 00FFF147 03A                             abx                                                                     ; skip the first position - might be prime
442
                              sieve1:
443
 00FFF148 03A                             abx                                                                     ; increment
444
 00FFF149 0A7809E00000                    sta             TEXTSCR,x
445
 00FFF14D 08C000FFF                       cmpx    #4095
446
 00FFF150 025FC7                          blo             multi_sieve1
447
 00FFF152 05C                             incb                                                            ; number of cores working on it
448
 00FFF153 0C1FF0                          cmpb    #4080
449
 00FFF155 025FED                          blo             sieve2
450
                              sieve4:                                                         ; hang machine
451
 00FFF157 013                             sync
452
 00FFF158 016000836                       lbra    MonitorStart
453
 
454
                              ;------------------------------------------------------------------------------
455
                              ; Three second delay for user convenience and to allow some devices time to
456
                              ; reset.
457
                              ;------------------------------------------------------------------------------
458
 
459
                              Delay3s:
460
 00FFF15B 0CC895440                       ldd             #9000000
461
                              dly3s1:
462
 00FFF15E 0C10FF                          cmpb    #$FF
463
 00FFF160 026000                          bne             dly3s2
464
                              dly3s2:
465
 00FFF162 0150B7FFFE60000                 sta             LEDS
466
 00FFF167 083000001                       subd    #1
467
 00FFF16A 026FF2                          bne             dly3s1
468
 00FFF16C 039                             rts
469
 
470
                              ;------------------------------------------------------------------------------
471
                              ;------------------------------------------------------------------------------
472
                              ShiftLeft5:
473
 00FFF16D 058                             aslb
474
 00FFF16E 049                             rola
475
 00FFF16F 058                             aslb
476
 00FFF170 049                             rola
477
 00FFF171 058                             aslb
478
 00FFF172 049                             rola
479
 00FFF173 058                             aslb
480
 00FFF174 049                             rola
481
 00FFF175 058                             aslb
482
 00FFF176 049                             rola
483
 00FFF177 039                             rts
484
 
485
                              ;------------------------------------------------------------------------------
486
                              ;------------------------------------------------------------------------------
487
                              ;
488
                              CopyVirtualScreenToScreen:
489
 00FFF178 034076                          pshs    d,x,y,u
490
 00FFF17A 08D0B4                          bsr             GetScreenLocation
491
 00FFF17C 01F001                          tfr             d,x
492
 00FFF17E 18EE00000                       ldy             #TEXTSCR
493
 00FFF181 0CE00032C                       ldu             #56*29/2
494
                              cv2s1:
495
 00FFF184 0EC801                          ldd             ,x++
496
 00FFF186 0EDA01                          std             ,y++
497
 00FFF188 0335FF                          leau    -1,u
498
 00FFF18A 283000000                       cmpu    #0
499
 00FFF18D 026FF5                          bne             cv2s1
500
                                      ; reset the cursor position in the text controller
501
 00FFF18F 0D6110                          ldb             CursorRow
502
 00FFF191 086038                          lda             #56
503
 00FFF193 03D                             mul
504
 00FFF194 01F001                          tfr             d,x
505
 00FFF196 0D6111                          ldb             CursorCol
506
 00FFF198 03A                             abx
507
 00FFF199 0150BFFFFE0DF22                 stx             TEXTREG+TEXT_CURPOS
508
 00FFF19E 0350F6                          puls    d,x,y,u,pc
509
 
510
                              ;------------------------------------------------------------------------------
511
                              ;------------------------------------------------------------------------------
512
                              ;
513
                              CopyScreenToVirtualScreen:
514
 00FFF1A0 034076                          pshs    d,x,y,u
515
 00FFF1A2 08D08C                          bsr             GetScreenLocation
516
 00FFF1A4 01F002                          tfr             d,y
517
 00FFF1A6 08EE00000                       ldx             #TEXTSCR
518
 00FFF1A9 0CE00032C                       ldu             #56*29/2
519
                              cs2v1:
520
 00FFF1AC 0EC801                          ldd             ,x++
521
 00FFF1AE 0EDA01                          std             ,y++
522
 00FFF1B0 0335FF                          leau    -1,u
523
 00FFF1B2 283000000                       cmpu    #0
524
 00FFF1B5 026FF5                          bne             cs2v1
525
 00FFF1B7 0350F6                          puls    d,x,y,u,pc
526
 
527
                              ;------------------------------------------------------------------------------
528
                              ;------------------------------------------------------------------------------
529
 00FFF1B9 054045058054053043052           fcb             "TEXTSCR "
530
 00FFF1C0 020
531
 00FFF1C1 FFF1CB                          fcw             TextOpen
532
 00FFF1C3 FFF1CC                          fcw             TextClose
533
 00FFF1C5 FFF1CD                          fcw             TextRead
534
 00FFF1C7 FFF1CE                          fcw             TextWrite
535
 00FFF1C9 FFF1CF                          fcw             TextSeek
536
 
537
                              TextOpen:
538
 00FFF1CB 039                             rts
539
                              TextClose:
540
 00FFF1CC 039                             rts
541
                              TextRead:
542
 00FFF1CD 039                             rts
543
                              TextWrite:
544
 00FFF1CE 039                             rts
545
                              TextSeek:
546
 00FFF1CF 039                             rts
547
 
548
                              ;------------------------------------------------------------------------------
549
                              ; Clear the screen and the screen color memory
550
                              ; We clear the screen to give a visual indication that the system
551
                              ; is working at all.
552
                              ;
553
                              ; Modifies:
554
                              ;               none
555
                              ;------------------------------------------------------------------------------
556
 
557
                              ClearScreen:
558
 00FFF1D0 034076                          pshs    d,x,y,u
559
 00FFF1D2 08E000658                       ldx             #56*29
560
 00FFF1D5 01F013                          tfr             x,u
561
 00FFF1D7 08D057                          bsr             GetScreenLocation
562
 00FFF1D9 01F002                          tfr             d,y
563
 00FFF1DB 0C6020                          ldb             #' '                            ; space char
564
                              cs1:
565
 00FFF1DD 0E7A00                          stb             ,y+                                     ; set text to space
566
 00FFF1DF 0301FF                          leax    -1,x                            ; decrement x
567
 00FFF1E1 026FFA                          bne             cs1
568
 00FFF1E3 0150F6FFFFFFFE0                 ldb             COREID                  ; update colors only if we have focus
569
 00FFF1E8 0D1100                          cmpb    IOFocusID
570
 00FFF1EA 02000D                          bra             cs3
571
 00FFF1EC 18EE02000                       ldy             #TEXTSCR+$2000
572
                              ;       lda             CharColor
573
 00FFF1EF 0860CE                          lda             #$0CE
574
 00FFF1F1 01F031                          tfr             u,x                                     ; get back count
575
                              cs2:
576
 00FFF1F3 0A7A00                          sta             ,y+
577
 00FFF1F5 0301FF                          leax    -1,x                            ; decrement x
578
 00FFF1F7 026FFA                          bne             cs2
579
                              cs3:
580
 00FFF1F9 0350F6                          puls    d,x,y,u,pc
581
 
582
                              ;------------------------------------------------------------------------------
583
                              ; Scroll text on the screen upwards
584
                              ;
585
                              ; Modifies:
586
                              ;               none
587
                              ;------------------------------------------------------------------------------
588
 
589
                              ScrollUp:
590
 00FFF1FB 034076                          pshs    d,x,y,u
591
 00FFF1FD 18E00032B                       ldy             #(56*29-1)/2    ; y = num chars/2 to move
592
 00FFF200 08D02E                          bsr             GetScreenLocation
593
 00FFF202 01F001                          tfr             d,x
594
 00FFF204 01F003                          tfr             d,u
595
 00FFF206 030038                          leax    56,x                    ; x = index to source row
596
                              scrup1:
597
 00FFF208 0EC801                          ldd             ,x++                    ; move 2 characters
598
 00FFF20A 0EDC01                          std             ,u++
599
 00FFF20C 0313FF                          leay    -1,y
600
 00FFF20E 026FF8                          bne             scrup1
601
 00FFF210 08601E                          lda             #30
602
 00FFF212 08D002                          bsr             BlankLine
603
 00FFF214 0350F6                          puls    d,x,y,u,pc
604
 
605
                              ;------------------------------------------------------------------------------
606
                              ; Blank out a line on the display
607
                              ;
608
                              ; Modifies:
609
                              ;               none
610
                              ; Parameters:
611
                              ;       acca = line number to blank
612
                              ;------------------------------------------------------------------------------
613
 
614
                              BlankLine:
615
 00FFF216 034016                          pshs    d,x
616
 00FFF218 034002                          pshs    a
617
 00FFF21A 08D014                          bsr             GetScreenLocation
618
 00FFF21C 01F001                          tfr             d,x
619
 00FFF21E 035002                          puls    a
620
 00FFF220 0C6038                          ldb             #56             ; b = # chars to blank out from video controller
621
 00FFF222 03D                             mul                                     ; d = screen index (row# * #cols)
622
 00FFF223 03080B                          leax    d,x
623
 00FFF225 086020                          lda             #' '
624
 00FFF227 0C6038                          ldb             #56             ; b = # chars to blank out from video controller
625
                              blnkln1:
626
 00FFF229 0A7800                          sta             ,x+
627
 00FFF22B 05A                             decb
628
 00FFF22C 026FFB                          bne             blnkln1
629
 00FFF22E 035096                          puls    d,x,pc
630
 
631
                              ;------------------------------------------------------------------------------
632
                              ; Get the location of the screen memory. The location
633
                              ; depends on whether or not the task has the output focus.
634
                              ;
635
                              ; Modifies:
636
                              ;               d
637
                              ; Retuns:
638
                              ;               d = screen location
639
                              ;------------------------------------------------------------------------------
640
 
641
                              GetScreenLocation:
642
 00FFF230 0150B6FFFFFFFE0                 lda             COREID                  ; which core are we?
643
 00FFF235 091100                          cmpa    IOFocusID               ; do we have the IO focus
644
 00FFF237 026004                          bne             gsl1                            ; no, go pick virtual screen address
645
 00FFF239 0CCE00000                       ldd             #TEXTSCR                ; yes, we update the real screen
646
 00FFF23C 039                             rts
647
                              gsl1:
648
 00FFF23D 0CC007800                       ldd             #$7800
649
 00FFF240 039                             rts
650
 
651
                              ;------------------------------------------------------------------------------
652
                              ; HomeCursor
653
                              ; Set the cursor location to the top left of the screen.
654
                              ;
655
                              ; Modifies:
656
                              ;               none
657
                              ;------------------------------------------------------------------------------
658
 
659
                              HomeCursor:
660
 00FFF241 034016                          pshs    d,x
661
 00FFF243 00F110                          clr             CursorRow
662
 00FFF245 00F111                          clr             CursorCol
663
 00FFF247 0150F6FFFFFFFE0                 ldb             COREID
664
 00FFF24C 0D1100                          cmpb    IOFocusID
665
 00FFF24E 026006                          bne             hc1
666
 00FFF250 04F                             clra
667
 00FFF251 0150B7FFFE0DF22                 sta             TEXTREG+TEXT_CURPOS
668
                              hc1:
669
 00FFF256 035096                          puls    d,x,pc
670
 
671
                              ;------------------------------------------------------------------------------
672
                              ; Update the cursor position in the text controller based on the
673
                              ;  CursorRow,CursorCol.
674
                              ;
675
                              ; Modifies:
676
                              ;               none
677
                              ;------------------------------------------------------------------------------
678
                              ;
679
                              UpdateCursorPos:
680
 00FFF258 034016                          pshs    d,x
681
 00FFF25A 0150F6FFFFFFFE0                 ldb             COREID                          ; update cursor position in text controller
682
 00FFF25F 0D1100                          cmpb    IOFocusID                       ; only for the task with the output focus
683
 00FFF261 026014                          bne             ucp1
684
 00FFF263 096110                          lda             CursorRow
685
 00FFF265 08403F                          anda    #$3F                                    ; limit of 63 rows
686
 00FFF267 0150F6FFFE0DF00                 ldb             TEXTREG+TEXT_COLS
687
 00FFF26C 03D                             mul
688
 00FFF26D 01F001                          tfr             d,x
689
 00FFF26F 0D6111                          ldb             CursorCol
690
 00FFF271 03A                             abx
691
 00FFF272 0150BFFFFE0DF22                 stx             TEXTREG+TEXT_CURPOS
692
                              ucp1:
693
 00FFF277 035096                          puls    d,x,pc
694
 
695
                              ;------------------------------------------------------------------------------
696
                              ; Calculate screen memory location from CursorRow,CursorCol.
697
                              ; Also refreshes the cursor location.
698
                              ;
699
                              ; Modifies:
700
                              ;               d
701
                              ; Returns:
702
                              ;       d = screen location
703
                              ;------------------------------------------------------------------------------
704
                              ;
705
                              CalcScreenLoc:
706
 00FFF279 034010                          pshs    x
707
 00FFF27B 096110                          lda             CursorRow
708
 00FFF27D 0C6038                          ldb             #56
709
 00FFF27F 03D                             mul
710
 00FFF280 01F001                          tfr             d,x
711
 00FFF282 0D6111                          ldb             CursorCol
712
 00FFF284 03A                             abx
713
 00FFF285 0150F6FFFFFFFE0                 ldb             COREID                          ; update cursor position in text controller
714
 00FFF28A 0D1100                          cmpb    IOFocusID                       ; only for the task with the output focus
715
 00FFF28C 026005                          bne             csl1
716
 00FFF28E 0150BFFFFE0DF22                 stx             TEXTREG+TEXT_CURPOS
717
                              csl1:
718
 00FFF293 08DF9B                          bsr             GetScreenLocation
719
 00FFF295 03080B                          leax    d,x
720
 00FFF297 01F010                          tfr             x,d
721
 00FFF299 035090                          puls    x,pc
722
 
723
                              ;------------------------------------------------------------------------------
724
                              ; Display a character on the screen.
725
                              ; If the task doesn't have the I/O focus then the character is written to
726
                              ; the virtual screen.
727
                              ;
728
                              ; Modifies:
729
                              ;               none
730
                              ; Parameters:
731
                              ;       accb = char to display
732
                              ;------------------------------------------------------------------------------
733
                              ;
734
                              DisplayChar:
735
 00FFF29B 034016                          pshs    d,x
736
 00FFF29D 0C100D                          cmpb    #CR                                     ; carriage return ?
737
 00FFF29F 026006                          bne             dccr
738
 00FFF2A1 00F111                          clr             CursorCol               ; just set cursor column to zero on a CR
739
 00FFF2A3 08DFB3                          bsr             UpdateCursorPos
740
                              dcx14:
741
 00FFF2A5 035096                          puls    d,x,pc
742
                              dccr:
743
 00FFF2A7 0C1091                          cmpb    #$91                            ; cursor right ?
744
 00FFF2A9 02600D                          bne             dcx6
745
 00FFF2AB 096111                          lda             CursorCol
746
 00FFF2AD 081038                          cmpa    #56
747
 00FFF2AF 024003                          bhs             dcx7
748
 00FFF2B1 04C                             inca
749
 00FFF2B2 097111                          sta             CursorCol
750
                              dcx7:
751
 00FFF2B4 08DFA2                          bsr             UpdateCursorPos
752
 00FFF2B6 035096                          puls    d,x,pc
753
                              dcx6:
754
 00FFF2B8 0C1090                          cmpb    #$90                            ; cursor up ?
755
 00FFF2BA 026009                          bne             dcx8
756
 00FFF2BC 096110                          lda             CursorRow
757
 00FFF2BE 027FF4                          beq             dcx7
758
 00FFF2C0 04A                             deca
759
 00FFF2C1 097110                          sta             CursorRow
760
 00FFF2C3 020FEF                          bra             dcx7
761
                              dcx8:
762
 00FFF2C5 0C1093                          cmpb    #$93                            ; cursor left ?
763
 00FFF2C7 026009                          bne             dcx9
764
 00FFF2C9 096111                          lda             CursorCol
765
 00FFF2CB 027FE7                          beq             dcx7
766
 00FFF2CD 04A                             deca
767
 00FFF2CE 097111                          sta             CursorCol
768
 00FFF2D0 020FE2                          bra             dcx7
769
                              dcx9:
770
 00FFF2D2 0C1092                          cmpb    #$92                            ; cursor down ?
771
 00FFF2D4 02600B                          bne             dcx10
772
 00FFF2D6 096110                          lda             CursorRow
773
 00FFF2D8 08101D                          cmpa    #29
774
 00FFF2DA 027FD8                          beq             dcx7
775
 00FFF2DC 04C                             inca
776
 00FFF2DD 097110                          sta             CursorRow
777
 00FFF2DF 020FD3                          bra             dcx7
778
                              dcx10:
779
 00FFF2E1 0C1094                          cmpb    #$94                            ; cursor home ?
780
 00FFF2E3 02600C                          bne             dcx11
781
 00FFF2E5 096111                          lda             CursorCol
782
 00FFF2E7 027004                          beq             dcx12
783
 00FFF2E9 00F111                          clr             CursorCol
784
 00FFF2EB 020FC7                          bra             dcx7
785
                              dcx12:
786
 00FFF2ED 00F110                          clr             CursorRow
787
 00FFF2EF 020FC3                          bra             dcx7
788
                              dcx11:
789
 00FFF2F1 0C1099                          cmpb    #$99                            ; delete ?
790
 00FFF2F3 026008                          bne             dcx13
791
 00FFF2F5 08DF82                          bsr             CalcScreenLoc
792
 00FFF2F7 01F001                          tfr             d,x
793
 00FFF2F9 096111                          lda             CursorCol               ; acc = cursor column
794
 00FFF2FB 02000D                          bra             dcx5
795
                              dcx13
796
 00FFF2FD 0C1008                          cmpb    #CTRLH                  ; backspace ?
797
 00FFF2FF 02601A                          bne             dcx3
798
 00FFF301 096111                          lda             CursorCol
799
 00FFF303 02702A                          beq             dcx4
800
 00FFF305 04A                             deca
801
 00FFF306 097111                          sta             CursorCol
802
 00FFF308 08DF6F                          bsr             CalcScreenLoc
803
                              dcx5:
804
 00FFF30A 0E6001                          ldb             1,x
805
 00FFF30C 0E7801                          stb             ,x++
806
 00FFF30E 04C                             inca
807
 00FFF30F 081038                          cmpa    #56
808
 00FFF311 025FF7                          blo             dcx5
809
 00FFF313 0C6020                          ldb             #' '
810
 00FFF315 0301FF                          leax    -1,x
811
 00FFF317 0E7804                          stb             ,x
812
 00FFF319 03509E                          puls    d,x,dp,pc
813
                              dcx3:
814
 00FFF31B 0C100A                          cmpb    #LF                             ; linefeed ?
815
 00FFF31D 02700E                          beq             dclf
816
 00FFF31F 034004                          pshs    b
817
 00FFF321 08DF56                          bsr     CalcScreenLoc
818
 00FFF323 01F001                          tfr             d,x
819
 00FFF325 035004                          puls    b
820
 00FFF327 0E7804                          stb             ,x
821
                                      ; ToDo character color
822
                              ;       lda             CharColor
823
                              ;       sta             $2000,x
824
 00FFF329 08D006                          bsr             IncCursorPos
825
 00FFF32B 035096                          puls    d,x,pc
826
                              dclf:
827
 00FFF32D 08D011                          bsr             IncCursorRow
828
                              dcx4:
829
 00FFF32F 035096                          puls    d,x,pc
830
 
831
                              ;------------------------------------------------------------------------------
832
                              ; Increment the cursor position, scroll the screen if needed.
833
                              ;
834
                              ; Modifies:
835
                              ;               none
836
                              ;------------------------------------------------------------------------------
837
 
838
                              IncCursorPos:
839
 00FFF331 034016                          pshs    d,x
840
 00FFF333 096111                          lda             CursorCol
841
 00FFF335 04C                             inca
842
 00FFF336 097111                          sta             CursorCol
843
 00FFF338 081038                          cmpa    #56
844
 00FFF33A 025014                          blo             icc1
845
 00FFF33C 00F111                          clr             CursorCol               ; column = 0
846
 00FFF33E 020002                          bra             icr1
847
                              IncCursorRow:
848
 00FFF340 034016                          pshs    d,x
849
                              icr1:
850
 00FFF342 096110                          lda             CursorRow
851
 00FFF344 04C                             inca
852
 00FFF345 097110                          sta             CursorRow
853
 00FFF347 08101D                          cmpa    #29
854
 00FFF349 025005                          blo             icc1
855
 00FFF34B 04A                             deca                                                    ; backup the cursor row, we are scrolling up
856
 00FFF34C 097110                          sta             CursorRow
857
 00FFF34E 08DEAB                          bsr             ScrollUp
858
                              icc1:
859
 00FFF350 08DF06                          bsr             UpdateCursorPos
860
                              icc2:
861
 00FFF352 035096                          puls    d,x,pc
862
 
863
                              ;------------------------------------------------------------------------------
864
                              ; Display a string on the screen.
865
                              ;
866
                              ; Modifies:
867
                              ;               none
868
                              ; Parameters:
869
                              ;               d = pointer to string
870
                              ;------------------------------------------------------------------------------
871
                              ;
872
                              DisplayString:
873
 00FFF354 034016                          pshs    d,x
874
 00FFF356 01F001                          tfr             d,x
875
                              dspj1B:
876
 00FFF358 0E6800                          ldb             ,x+                             ; move string char into acc
877
 00FFF35A 027004                          beq             dsretB          ; is it end of string ?
878
 00FFF35C 08D61E                          bsr             OUTCH                   ; display character
879
 00FFF35E 020FF8                          bra             dspj1B
880
                              dsretB:
881
 00FFF360 035096                          puls    d,x,pc
882
 
883
                              DisplayStringCRLF:
884
 00FFF362 034006                          pshs    d
885
 00FFF364 08DFEE                          bsr             DisplayString
886
 00FFF366 0C600D                          ldb             #CR
887
 00FFF368 08D612                          bsr             OUTCH
888
 00FFF36A 0C600A                          ldb             #LF
889
 00FFF36C 08D60E                          bsr             OUTCH
890
 00FFF36E 035086                          puls    d,pc
891
 
892
                              ;
893
                              ; PRINT CR, LF, STRING
894
                              ;
895
                              PSTRNG
896
 00FFF370 08D002                          BSR             PCRLF
897
 00FFF372 02000D                          BRA             PDATA
898
                              PCRLF
899
 00FFF374 034010                          PSHS    X
900
 00FFF376 08EFFF388                       LDX             #CRLFST
901
 00FFF379 08D006                          BSR             PDATA
902
 00FFF37B 035010                          PULS    X
903
 00FFF37D 039                             RTS
904
 
905
                              PRINT
906
 00FFF37E 0BDFFF97C                       JSR             OUTCH
907
                              PDATA
908
 00FFF381 0E6800                          LDB             ,X+
909
 00FFF383 0C1004                          CMPB    #$04
910
 00FFF385 026FF7                          BNE             PRINT
911
 00FFF387 039                             RTS
912
 
913
                              CRLFST
914
 00FFF388 00D00A004                       fcb     CR,LF,4
915
 
916
                              DispDWordAsHex:
917
 00FFF38B 08D007                          bsr             DispWordAsHex
918
 00FFF38D 01E001                          exg             d,x
919
 00FFF38F 08D003                          bsr             DispWordAsHex
920
 00FFF391 01E001                          exg             d,x
921
 00FFF393 039                             rts
922
 
923
                              DispWordAsHex:
924
 00FFF394 01E089                          exg             a,b
925
 00FFF396 08D005                          bsr             DispByteAsHex
926
 00FFF398 01E089                          exg             a,b
927
 00FFF39A 08D001                          bsr             DispByteAsHex
928
 00FFF39C 039                             rts
929
 
930
                              DispByteAsHex:
931
 00FFF39D 034004                    pshs  b
932
 00FFF39F 054                             lsrb
933
 00FFF3A0 054                             lsrb
934
 00FFF3A1 054                             lsrb
935
 00FFF3A2 054                             lsrb
936
 00FFF3A3 054                             lsrb
937
 00FFF3A4 054                             lsrb
938
 00FFF3A5 054                             lsrb
939
 00FFF3A6 054                             lsrb
940
 00FFF3A7 08D00C                          bsr             DispNyb
941
 00FFF3A9 035004                          puls    b
942
 00FFF3AB 034004                          pshs    b
943
 00FFF3AD 054                             lsrb
944
 00FFF3AE 054                             lsrb
945
 00FFF3AF 054                             lsrb
946
 00FFF3B0 054                             lsrb
947
 00FFF3B1 08D002                          bsr             DispNyb
948
 00FFF3B3 035004                          puls    b
949
 
950
                              DispNyb
951
 00FFF3B5 034004                          pshs    b
952
 00FFF3B7 0C400F                          andb    #$0F
953
 00FFF3B9 0C100A                          cmpb    #10
954
 00FFF3BB 025006                          blo             DispNyb1
955
 00FFF3BD 0CB037                          addb    #'A'-10
956
 00FFF3BF 08D5BB                          bsr             OUTCH
957
 00FFF3C1 035084                          puls    b,pc
958
                              DispNyb1
959
 00FFF3C3 0CB030                          addb    #'0'
960
 00FFF3C5 08D5B5                          bsr             OUTCH
961
 00FFF3C7 035084                          puls    b,pc
962
 
963
                              ;==============================================================================
964
                              ; Keyboard I/O
965
                              ;==============================================================================
966
 
967
                                      ;--------------------------------------------------------------------------
968
                                      ; PS2 scan codes to ascii conversion tables.
969
                                      ;--------------------------------------------------------------------------
970
                                      ;
971
                                      org     (* + 127) & $FFFFFF80
972
 
973
                              unshiftedScanCodes:
974
 00FFF400 02E0A902E0A50A30A10A2           fcb     $2e,$a9,$2e,$a5,$a3,$a1,$a2,$ac
975
 00FFF407 0AC
976
 00FFF408 02E0AA0A80A60A4009060           fcb     $2e,$aa,$a8,$a6,$a4,$09,$60,$2e
977
 00FFF40F 02E
978
 00FFF410 02E02E02E02E02E071031           fcb     $2e,$2e,$2e,$2e,$2e,$71,$31,$2e
979
 00FFF417 02E
980
 00FFF418 02E02E07A073061077032           fcb     $2e,$2e,$7a,$73,$61,$77,$32,$2e
981
 00FFF41F 02E
982
 00FFF420 02E063078064065034033           fcb     $2e,$63,$78,$64,$65,$34,$33,$2e
983
 00FFF427 02E
984
 00FFF428 02E020076066074072035           fcb     $2e,$20,$76,$66,$74,$72,$35,$2e
985
 00FFF42F 02E
986
 00FFF430 02E06E062068067079036           fcb     $2e,$6e,$62,$68,$67,$79,$36,$2e
987
 00FFF437 02E
988
 00FFF438 02E02E06D06A075037038           fcb     $2e,$2e,$6d,$6a,$75,$37,$38,$2e
989
 00FFF43F 02E
990
 00FFF440 02E02C06B06906F030039           fcb     $2e,$2c,$6b,$69,$6f,$30,$39,$2e
991
 00FFF447 02E
992
 00FFF448 02E02E02F06C03B07002D           fcb     $2e,$2e,$2f,$6c,$3b,$70,$2d,$2e
993
 00FFF44F 02E
994
 00FFF450 02E02E02702E05B03D02E           fcb     $2e,$2e,$27,$2e,$5b,$3d,$2e,$2e
995
 00FFF457 02E
996
 00FFF458 0AD02E00D05D02E05C02E           fcb     $ad,$2e,$0d,$5d,$2e,$5c,$2e,$2e
997
 00FFF45F 02E
998
 00FFF460 02E02E02E02E02E02E008           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e
999
 00FFF467 02E
1000
 00FFF468 02E09502E09309402E02E           fcb     $2e,$95,$2e,$93,$94,$2e,$2e,$2e
1001
 00FFF46F 02E
1002
 00FFF470 09807F09202E09109001B           fcb     $98,$7f,$92,$2e,$91,$90,$1b,$af
1003
 00FFF477 0AF
1004
 00FFF478 0AB02E09702E02E0960AE           fcb     $ab,$2e,$97,$2e,$2e,$96,$ae,$2e
1005
 00FFF47F 02E
1006
 
1007
 00FFF480 02E02E02E0A702E02E02E           fcb     $2e,$2e,$2e,$a7,$2e,$2e,$2e,$2e
1008
 00FFF487 02E
1009
 00FFF488 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1010
 00FFF48F 02E
1011
 00FFF490 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1012
 00FFF497 02E
1013
 00FFF498 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1014
 00FFF49F 02E
1015
 00FFF4A0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1016
 00FFF4A7 02E
1017
 00FFF4A8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1018
 00FFF4AF 02E
1019
 00FFF4B0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1020
 00FFF4B7 02E
1021
 00FFF4B8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1022
 00FFF4BF 02E
1023
 00FFF4C0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1024
 00FFF4C7 02E
1025
 00FFF4C8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1026
 00FFF4CF 02E
1027
 00FFF4D0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1028
 00FFF4D7 02E
1029
 00FFF4D8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1030
 00FFF4DF 02E
1031
 00FFF4E0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1032
 00FFF4E7 02E
1033
 00FFF4E8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1034
 00FFF4EF 02E
1035
 00FFF4F0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1036
 00FFF4F7 02E
1037
 00FFF4F8 02E02E0FA02E02E02E02E           fcb     $2e,$2e,$fa,$2e,$2e,$2e,$2e,$2e
1038
 00FFF4FF 02E
1039
 
1040
                              shiftedScanCodes:
1041
 00FFF500 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1042
 00FFF507 02E
1043
 00FFF508 02E02E02E02E02E00907E           fcb     $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e
1044
 00FFF50F 02E
1045
 00FFF510 02E02E02E02E02E051021           fcb     $2e,$2e,$2e,$2e,$2e,$51,$21,$2e
1046
 00FFF517 02E
1047
 00FFF518 02E02E05A053041057040           fcb     $2e,$2e,$5a,$53,$41,$57,$40,$2e
1048
 00FFF51F 02E
1049
 00FFF520 02E043058044045024023           fcb     $2e,$43,$58,$44,$45,$24,$23,$2e
1050
 00FFF527 02E
1051
 00FFF528 02E020056046054052025           fcb     $2e,$20,$56,$46,$54,$52,$25,$2e
1052
 00FFF52F 02E
1053
 00FFF530 02E04E04204804705905E           fcb     $2e,$4e,$42,$48,$47,$59,$5e,$2e
1054
 00FFF537 02E
1055
 00FFF538 02E02E04D04A05502602A           fcb     $2e,$2e,$4d,$4a,$55,$26,$2a,$2e
1056
 00FFF53F 02E
1057
 00FFF540 02E03C04B04904F029028           fcb     $2e,$3c,$4b,$49,$4f,$29,$28,$2e
1058
 00FFF547 02E
1059
 00FFF548 02E03E03F04C03A05005F           fcb     $2e,$3e,$3f,$4c,$3a,$50,$5f,$2e
1060
 00FFF54F 02E
1061
 00FFF550 02E02E02202E07B02B02E           fcb     $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e
1062
 00FFF557 02E
1063
 00FFF558 02E02E00D07D02E07C02E           fcb     $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e
1064
 00FFF55F 02E
1065
 00FFF560 02E02E02E02E02E02E008           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e
1066
 00FFF567 02E
1067
 00FFF568 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1068
 00FFF56F 02E
1069
 00FFF570 02E07F02E02E02E02E01B           fcb     $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e
1070
 00FFF577 02E
1071
 00FFF578 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1072
 00FFF57F 02E
1073
 
1074
 00FFF580 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1075
 00FFF587 02E
1076
 00FFF588 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1077
 00FFF58F 02E
1078
 00FFF590 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1079
 00FFF597 02E
1080
 00FFF598 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1081
 00FFF59F 02E
1082
 00FFF5A0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1083
 00FFF5A7 02E
1084
 00FFF5A8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1085
 00FFF5AF 02E
1086
 00FFF5B0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1087
 00FFF5B7 02E
1088
 00FFF5B8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1089
 00FFF5BF 02E
1090
 00FFF5C0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1091
 00FFF5C7 02E
1092
 00FFF5C8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1093
 00FFF5CF 02E
1094
 00FFF5D0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1095
 00FFF5D7 02E
1096
 00FFF5D8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1097
 00FFF5DF 02E
1098
 00FFF5E0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1099
 00FFF5E7 02E
1100
 00FFF5E8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1101
 00FFF5EF 02E
1102
 00FFF5F0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1103
 00FFF5F7 02E
1104
 00FFF5F8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1105
 00FFF5FF 02E
1106
 
1107
                              ; control
1108
                              keybdControlCodes:
1109
 00FFF600 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1110
 00FFF607 02E
1111
 00FFF608 02E02E02E02E02E00907E           fcb     $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e
1112
 00FFF60F 02E
1113
 00FFF610 02E02E02E02E02E011021           fcb     $2e,$2e,$2e,$2e,$2e,$11,$21,$2e
1114
 00FFF617 02E
1115
 00FFF618 02E02E01A013001017040           fcb     $2e,$2e,$1a,$13,$01,$17,$40,$2e
1116
 00FFF61F 02E
1117
 00FFF620 02E003018004005024023           fcb     $2e,$03,$18,$04,$05,$24,$23,$2e
1118
 00FFF627 02E
1119
 00FFF628 02E020016006014012025           fcb     $2e,$20,$16,$06,$14,$12,$25,$2e
1120
 00FFF62F 02E
1121
 00FFF630 02E00E00200800701905E           fcb     $2e,$0e,$02,$08,$07,$19,$5e,$2e
1122
 00FFF637 02E
1123
 00FFF638 02E02E00D00A01502602A           fcb     $2e,$2e,$0d,$0a,$15,$26,$2a,$2e
1124
 00FFF63F 02E
1125
 00FFF640 02E03C00B00900F029028           fcb     $2e,$3c,$0b,$09,$0f,$29,$28,$2e
1126
 00FFF647 02E
1127
 00FFF648 02E03E03F00C03A01005F           fcb     $2e,$3e,$3f,$0c,$3a,$10,$5f,$2e
1128
 00FFF64F 02E
1129
 00FFF650 02E02E02202E07B02B02E           fcb     $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e
1130
 00FFF657 02E
1131
 00FFF658 02E02E00D07D02E07C02E           fcb     $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e
1132
 00FFF65F 02E
1133
 00FFF660 02E02E02E02E02E02E008           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e
1134
 00FFF667 02E
1135
 00FFF668 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1136
 00FFF66F 02E
1137
 00FFF670 02E07F02E02E02E02E01B           fcb     $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e
1138
 00FFF677 02E
1139
 00FFF678 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1140
 00FFF67F 02E
1141
 
1142
                              keybdExtendedCodes:
1143
 00FFF680 02E02E02E02E0A30A10A2           fcb     $2e,$2e,$2e,$2e,$a3,$a1,$a2,$2e
1144
 00FFF687 02E
1145
 00FFF688 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1146
 00FFF68F 02E
1147
 00FFF690 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1148
 00FFF697 02E
1149
 00FFF698 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1150
 00FFF69F 02E
1151
 00FFF6A0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1152
 00FFF6A7 02E
1153
 00FFF6A8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1154
 00FFF6AF 02E
1155
 00FFF6B0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1156
 00FFF6B7 02E
1157
 00FFF6B8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1158
 00FFF6BF 02E
1159
 00FFF6C0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1160
 00FFF6C7 02E
1161
 00FFF6C8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1162
 00FFF6CF 02E
1163
 00FFF6D0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1164
 00FFF6D7 02E
1165
 00FFF6D8 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1166
 00FFF6DF 02E
1167
 00FFF6E0 02E02E02E02E02E02E02E           fcb     $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e
1168
 00FFF6E7 02E
1169
 00FFF6E8 02E09502E09309402E02E           fcb     $2e,$95,$2e,$93,$94,$2e,$2e,$2e
1170
 00FFF6EF 02E
1171
 00FFF6F0 09809909202E09109002E           fcb     $98,$99,$92,$2e,$91,$90,$2e,$2e
1172
 00FFF6F7 02E
1173
 00FFF6F8 02E02E09702E02E09602E           fcb     $2e,$2e,$97,$2e,$2e,$96,$2e,$2e
1174
 00FFF6FF 02E
1175
 
1176
                              ; ============================================================================
1177
                              ;        __
1178
                              ;   \\__/ o\    (C) 2013-2022  Robert Finch, Waterloo
1179
                              ;    \  __ /    All rights reserved.
1180
                              ;     \/_//     robfinch@opencores.org
1181
                              ;       ||
1182
                              ;
1183
                              ;
1184
                              ;       Keyboard driver routines to interface to a PS2 style keyboard
1185
                              ; Converts the scancode to ascii
1186
                              ;
1187
                              ; This source file is free software: you can redistribute it and/or modify
1188
                              ; it under the terms of the GNU Lesser General Public License as published
1189
                              ; by the Free Software Foundation, either version 3 of the License, or
1190
                              ; (at your option) any later version.
1191
                              ;
1192
                              ; This source file is distributed in the hope that it will be useful,
1193
                              ; but WITHOUT ANY WARRANTY; without even the implied warranty of
1194
                              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1195
                              ; GNU General Public License for more details.
1196
                              ;
1197
                              ; You should have received a copy of the GNU General Public License
1198
                              ; along with this program.  If not, see .
1199
                              ;
1200
                              ; ============================================================================
1201
                              ;
1202
                              SC_F12  EQU     $07
1203
                              SC_C    EQU             $21
1204
                              SC_T    EQU         $2C
1205
                              SC_Z            EQU     $1A
1206
                              SC_DEL  EQU                     $71     ; extend
1207
                              SC_KEYUP        EQU             $F0     ; should be $f0
1208
                              SC_EXTEND EQU     $E0
1209
                              SC_CTRL EQU                     $14
1210
                              SC_RSHIFT               EQU     $59
1211
                              SC_NUMLOCK      EQU     $77
1212
                              SC_SCROLLLOCK           EQU     $7E
1213
                              SC_CAPSLOCK             EQU             $58
1214
                              SC_ALT  EQU                     $11
1215
 
1216
                              ;#define SC_LSHIFT      EQU             $12
1217
                              ;SC_DEL         EQU             $71             ; extend
1218
                              ;SC_LCTRL       EQU             $58
1219
 
1220
                              SC_TAB  EQU     $0D
1221
 
1222
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1223
                              ; Recieve a byte from the keyboard, used after a command is sent to the
1224
                              ; keyboard in order to wait for a response.
1225
                              ;
1226
                              ; Parameters: none
1227
                              ; Returns: accd = recieved byte ($00 to $FF), -1 on timeout
1228
                              ; Modifies: acc
1229
                              ; Stack Space: 2 words
1230
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1231
 
1232
                              KeybdRecvByte:
1233
 00FFF700 034010                          pshs    x
1234
 00FFF702 08E000064                       ldx             #100                                            ; wait up to 1s
1235
                              krb3:
1236
 00FFF705 08D05A                          bsr             KeybdGetStatus  ; wait for response from keyboard
1237
 00FFF707 05D                             tstb
1238
 00FFF708 02B00B                          bmi             krb4                                            ; is input buffer full ? yes, branch
1239
 00FFF70A 08D02D                          bsr             Wait10ms                                ; wait a bit
1240
 00FFF70C 0301FF                          leax    -1,x
1241
 00FFF70E 026FF5                          bne             krb3                                            ; go back and try again
1242
 00FFF710 0CCFFFFFF                       ldd             #-1                                                     ; return -1
1243
 00FFF713 035090                          puls    x,pc
1244
                              krb4:
1245
 00FFF715 08D066                          bsr             KeybdGetScancode
1246
 00FFF717 035090                          puls    x,pc
1247
 
1248
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1249
                              ; Send a byte to the keyboard.
1250
                              ;
1251
                              ; Parameters: accb byte to send
1252
                              ; Returns: none
1253
                              ; Modifies: none
1254
                              ; Stack Space: 0 words
1255
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1256
 
1257
                              KeybdSendByte:
1258
 00FFF719 0150F7FFFE30400                 stb             KEYBD
1259
 00FFF71E 039                             rts
1260
 
1261
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1262
                              ; Wait until the keyboard transmit is complete
1263
                              ;
1264
                              ; Parameters: none
1265
                              ; Returns: r1 = 0 if successful, r1 = -1 timeout
1266
                              ; Modifies: r1
1267
                              ; Stack Space: 3 words
1268
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1269
 
1270
                              KeybdWaitTx:
1271
 00FFF71F 034010                          pshs    x
1272
 00FFF721 08E000064                       ldx             #100                            ; wait a max of 1s
1273
                              kwt1:
1274
 00FFF724 08D03B                          bsr             KeybdGetStatus
1275
 00FFF726 0C4040                          andb    #$40                            ; check for transmit complete bit; branch if bit set
1276
 00FFF728 02600B                          bne             kwt2
1277
 00FFF72A 08D00D                          bsr             Wait10ms                ; delay a little bit
1278
 00FFF72C 0301FF                          leax    -1,x
1279
 00FFF72E 026FF4                          bne             kwt1                            ; go back and try again
1280
 00FFF730 0CCFFFFFF                       ldd             #-1                                     ; timed out, return -1
1281
 00FFF733 035090                          puls    x,pc
1282
                              kwt2:
1283
 00FFF735 04F                             clra                                                    ; wait complete, return 0
1284
 00FFF736 05F                             clrb
1285
 00FFF737 035090                          puls    x,pc
1286
 
1287
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1288
                              ; Wait for 10 ms
1289
                              ;
1290
                              ; Parameters: none
1291
                              ; Returns: none
1292
                              ; Modifies: none
1293
                              ; Stack Space: 2 words
1294
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1295
 
1296
                              Wait10ms:
1297
 00FFF739 034006                          pshs    d
1298
 00FFF73B 0150B6FFFFFFFE7                 lda             MSCOUNT+3
1299
                              W10_0001:
1300
 00FFF740 01F089                          tfr             a,b
1301
 00FFF742 0150F0FFFFFFFE7                 subb    MSCOUNT+3
1302
 00FFF747 0C1FFA                          cmpb    #$FFA
1303
 00FFF749 022FF5                          bhi             W10_0001
1304
 00FFF74B 035086                          puls    d,pc
1305
 
1306
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1307
                              ; Wait for 300 ms (256 ms)
1308
                              ;
1309
                              ; Parameters: none
1310
                              ; Returns: none
1311
                              ; Modifies: none
1312
                              ; Stack Space: 2 words
1313
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1314
 
1315
                              Wait300ms:
1316
 00FFF74D 034006                          pshs    d
1317
 00FFF74F 0150B6FFFFFFFE7                 lda             MSCOUNT+3
1318
                              W300_0001:
1319
 00FFF754 01F089                          tfr             a,b
1320
 00FFF756 0150F0FFFFFFFE7                 subb    MSCOUNT+3
1321
 00FFF75B 0C1F00                          cmpb    #$F00
1322
 00FFF75D 022FF5                          bhi     W300_0001
1323
 00FFF75F 035086                          puls    d,pc
1324
 
1325
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1326
                              ; Get the keyboard status
1327
                              ;
1328
                              ; Parameters: none
1329
                              ; Returns: d = status
1330
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1331
 
1332
                              KeybdGetStatus:
1333
                              kbgs3:
1334
 00FFF761 0150F6FFFE30401                 ldb             KEYBD+1
1335
 00FFF766 0C5080                          bitb    #$80
1336
 00FFF768 02600E                          bne             kbgs1
1337
 00FFF76A 0C5001                          bitb    #$01            ; check parity error flag
1338
 00FFF76C 026002                          bne             kbgs2
1339
 00FFF76E 04F                             clra
1340
 00FFF76F 039                             rts
1341
                              kbgs2:
1342
 00FFF770 0C60FE                          ldb             #$FE            ; request resend
1343
 00FFF772 08DFA5                          bsr             KeybdSendByte
1344
 00FFF774 08DFA9                          bsr             KeybdWaitTx
1345
 00FFF776 020FE9                          bra             kbgs3
1346
                              kbgs1:                                  ; return negative status
1347
 00FFF778 0CAF00                          orb             #$F00
1348
 00FFF77A 086FFF                          lda             #-1
1349
 00FFF77C 039                             rts
1350
 
1351
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1352
                              ; Get the scancode from the keyboard port
1353
                              ;
1354
                              ; Parameters: none
1355
                              ; Returns: acca = scancode
1356
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1357
 
1358
                              KeybdGetScancode:
1359
 00FFF77D 04F                             clra
1360
 00FFF77E 0150F6FFFE30400                 ldb             KEYBD                           ; get the scan code
1361
 00FFF783 01507FFFFE30401                 clr             KEYBD+1                 ; clear receive register (write $00 to status reg)
1362
                                      ; The following useful during debug.
1363
                              ;       lbsr    DispByteAsHex
1364
                              ;       pshs    b
1365
                              ;       ldb             #' '
1366
                              ;       lbsr    OUTCH
1367
                              ;       puls    b
1368
 00FFF788 039                             rts
1369
 
1370
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1371
                              ; Set the LEDs on the keyboard.
1372
                              ;
1373
                              ; Parameters: d LED status to set
1374
                              ; Returns: none
1375
                              ; Modifies: none
1376
                              ; Stack Space: 2 words
1377
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1378
 
1379
                              KeybdSetLED:
1380
 00FFF789 034004                          pshs    b
1381
 00FFF78B 0C60ED                          ldb             #$ED                                            ; set LEDs command
1382
 00FFF78D 08DF8A                          bsr             KeybdSendByte
1383
 00FFF78F 08DF8E                          bsr             KeybdWaitTx
1384
 00FFF791 08DF6D                          bsr             KeybdRecvByte   ; should be an ack
1385
 00FFF793 035004                          puls    b
1386
 00FFF795 08DF82                          bsr             KeybdSendByte
1387
 00FFF797 08DF86                          bsr             KeybdWaitTx
1388
 00FFF799 08DF65                          bsr             KeybdRecvByte   ; should be an ack
1389
 00FFF79B 039                             rts
1390
 
1391
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1392
                              ; Get ID - get the keyboards identifier code.
1393
                              ;
1394
                              ; Parameters: none
1395
                              ; Returns: d = $AB83, $00 on fail
1396
                              ; Modifies: d, KeybdID updated
1397
                              ; Stack Space: 2 words
1398
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1399
 
1400
                              KeybdGetID:
1401
 00FFF79C 0C60F2                          ldb             #$F2
1402
 00FFF79E 08DF79                          bsr             KeybdSendByte
1403
 00FFF7A0 08DF7D                          bsr             KeybdWaitTx
1404
 00FFF7A2 08DF5C                          bsr             KeybdRecvByte
1405
 00FFF7A4 0C5080                          bitb    #$80
1406
 00FFF7A6 026014                          bne             kgnotKbd
1407
 00FFF7A8 0C10AB                          cmpb    #$AB
1408
 00FFF7AA 026010                          bne             kgnotKbd
1409
 00FFF7AC 08DF52                          bsr             KeybdRecvByte
1410
 00FFF7AE 0C5080                          bitb    #$80
1411
 00FFF7B0 02600A                          bne             kgnotKbd
1412
 00FFF7B2 0C1083                          cmpb    #$83
1413
 00FFF7B4 026006                          bne             kgnotKbd
1414
 00FFF7B6 0CC00AB83                       ldd             #$AB83
1415
                              kgid1:
1416
 00FFF7B9 0DD124                          std             KeybdID
1417
 00FFF7BB 039                             rts
1418
                              kgnotKbd:
1419
 00FFF7BC 04F                             clra
1420
 00FFF7BD 05F                             clrb
1421
 00FFF7BE 020FF9                          bra             kgid1
1422
 
1423
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1424
                              ; Initialize the keyboard.
1425
                              ;
1426
                              ; Parameters:
1427
                              ;               none
1428
                              ;       Modifies:
1429
                              ;               none
1430
                              ; Returns:
1431
                              ;               none
1432
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1433
 
1434
                              KeybdInit:
1435
 00FFF7C0 034026                          pshs    d,y
1436
 00FFF7C2 18E000005                       ldy             #5
1437
                              kbdi0002:
1438
 00FFF7C5 08DF72                          bsr             Wait10ms
1439
 00FFF7C7 01507FFFFE30401                 clr             KEYBD+1                 ; clear receive register (write $00 to status reg)
1440
 00FFF7CC 0C6FFF                          ldb             #-1                                     ; send reset code to keyboard
1441
 00FFF7CE 0150F7FFFE30401                 stb             KEYBD+1                 ; write $FF to status reg to clear TX state
1442
 00FFF7D3 08DF44                          bsr             KeybdSendByte   ; now write to transmit register
1443
 00FFF7D5 08DF48                          bsr             KeybdWaitTx             ; wait until no longer busy
1444
 00FFF7D7 08DF27                          bsr             KeybdRecvByte   ; look for an ACK ($FA)
1445
 00FFF7D9 0C10FA                          cmpb    #$FA
1446
 00FFF7DB 026021                          bne             kbdiTryAgain
1447
 00FFF7DD 08DF21                          bsr             KeybdRecvByte   ; look for BAT completion code ($AA)
1448
 00FFF7DF 0C10FC                          cmpb    #$FC                            ; reset error ?
1449
 00FFF7E1 02701B                          beq             kbdiTryAgain
1450
 00FFF7E3 0C10AA                          cmpb    #$AA                            ; reset complete okay ?
1451
 00FFF7E5 026017                          bne             kbdiTryAgain
1452
 
1453
                                      ; After a reset, scan code set #2 should be active
1454
                              .config:
1455
 00FFF7E7 0C60F0                          ldb             #$F0                    ; send scan code select
1456
 00FFF7E9 0150F7FFFE60000                 stb             LEDS
1457
 00FFF7EE 08DF29                          bsr             KeybdSendByte
1458
 00FFF7F0 08DF2D                          bsr             KeybdWaitTx
1459
 00FFF7F2 05D                             tstb
1460
 00FFF7F3 02B009                          bmi             kbdiTryAgain
1461
 00FFF7F5 08DF09                          bsr             KeybdRecvByte   ; wait for response from keyboard
1462
 00FFF7F7 04D                             tsta
1463
 00FFF7F8 02B004                          bmi             kbdiTryAgain
1464
 00FFF7FA 0C10FA                          cmpb    #$FA                                    ; ACK
1465
 00FFF7FC 02700C                          beq             kbdi0004
1466
                              kbdiTryAgain:
1467
 00FFF7FE 0313FF                          dey
1468
 00FFF800 026FC3                          bne       kbdi0002
1469
                              .keybdErr:
1470
 00FFF802 0CCFFF82A                       ldd             #msgBadKeybd
1471
 00FFF805 017FFFB5A                       lbsr    DisplayStringCRLF
1472
*** warning 1: Long branch within short branch range could be optimized
1473
 00FFF808 020014                          bra             ledxit
1474
                              kbdi0004:
1475
 00FFF80A 0C6002                          ldb             #2                      ; select scan code set #2
1476
 00FFF80C 08DF0B                          bsr             KeybdSendByte
1477
 00FFF80E 08DF0F                          bsr             KeybdWaitTx
1478
 00FFF810 05D                             tstb
1479
 00FFF811 02BFEB                          bmi             kbdiTryAgain
1480
 00FFF813 08DEEB                          bsr             KeybdRecvByte   ; wait for response from keyboard
1481
 00FFF815 04D                             tsta
1482
 00FFF816 02BFE6                          bmi             kbdiTryAgain
1483
 00FFF818 0C10FA                          cmpb    #$FA
1484
 00FFF81A 026FE2                          bne             kbdiTryAgain
1485
 00FFF81C 08DF7E                          bsr             KeybdGetID
1486
                              ledxit:
1487
 00FFF81E 0C6007                          ldb             #$07
1488
 00FFF820 08DF67                          bsr             KeybdSetLED
1489
 00FFF822 08DF29                          bsr             Wait300ms
1490
 00FFF824 0C6000                          ldb             #$00
1491
 00FFF826 08DF61                          bsr             KeybdSetLED
1492
 00FFF828 0350A6                          puls    d,y,pc
1493
 
1494
                              msgBadKeybd:
1495
 00FFF82A 04B06507906206F061072           fcb             "Keyboard error",0
1496
 00FFF831 06402006507207206F072
1497
 00FFF838 000
1498
 
1499
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1500
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1501
 
1502
                              DBGCheckForKey:
1503
 00FFF839 020F26                          bra             KeybdGetStatus
1504
 
1505
 
1506
                              ; KeyState2 variable bit meanings
1507
                              ;1176543210
1508
                              ; ||||||||+ = shift
1509
                              ; |||||||+- = alt
1510
                              ; ||||||+-- = control
1511
                              ; |||||+--- = numlock
1512
                              ; ||||+---- = capslock
1513
                              ; |||+----- = scrolllock
1514
                              ; ||+------ = 
1515
                              ; |+------- =    "
1516
                              ; |         =    "
1517
                              ; |         =    "
1518
                              ; |         =    "
1519
                              ; +-------- = extended
1520
 
1521
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1522
                              ; Debug versison of keyboard get routine.
1523
                              ;
1524
                              ; Parameters:
1525
                              ;               b:      0 = non blocking, otherwise blocking
1526
                              ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1527
 
1528
                              DBGGetKey:
1529
 00FFF83B 034010                          pshs    x
1530
                              dbgk2:
1531
 00FFF83D 034004                          pshs    b
1532
 00FFF83F 08DF20                          bsr             KeybdGetStatus
1533
 00FFF841 0C4080                          andb    #$80                                                    ; is key available?
1534
 00FFF843 035004                          puls    b
1535
 00FFF845 026008                          bne             dbgk1                                                   ; branch if key
1536
 00FFF847 05D                             tstb                                                                            ; block?
1537
 00FFF848 026FF3                          bne             dbgk2                                                   ; If no key and blocking - loop
1538
 00FFF84A 0CCFFFFFF                       ldd             #-1                                                             ; return -1 if no block and no key
1539
 00FFF84D 035090                          puls    x,pc
1540
                              dbgk1:
1541
 00FFF84F 08DF2C                          bsr             KeybdGetScancode
1542
                              ;       lbsr    DispByteAsHex
1543
                                      ; Make sure there is a small delay between scancode reads
1544
 00FFF851 08E000014                       ldx             #20
1545
                              dbgk3:
1546
 00FFF854 0301FF                          dex
1547
 00FFF856 026FFC                          bne             dbgk3
1548
                                      ; switch on scan code
1549
 00FFF858 0C10F0                          cmpb    #SC_KEYUP
1550
 00FFF85A 026006                          bne             dbgk4
1551
 00FFF85C 00F120                          clr             KeyState1                                       ; make KeyState1 = -1
1552
 00FFF85E 000120                          neg             KeyState1
1553
 00FFF860 020FDB                          bra             dbgk2                                                   ; loop back
1554
                              dbgk4:
1555
 00FFF862 0C10E0                          cmpb    #SC_EXTEND
1556
 00FFF864 026008                          bne             dbgk5
1557
 00FFF866 096121                          lda             KeyState2
1558
 00FFF868 08A800                          ora             #$800
1559
 00FFF86A 097121                          sta             KeyState2
1560
 00FFF86C 020FCF                          bra             dbgk2
1561
                              dbgk5:
1562
 00FFF86E 0C1014                          cmpb    #SC_CTRL
1563
 00FFF870 026016                          bne             dbgkNotCtrl
1564
 00FFF872 00D120                          tst             KeyState1
1565
 00FFF874 02B008                          bmi             dbgk7
1566
 00FFF876 096121                          lda             KeyState2
1567
 00FFF878 08A004                          ora             #4
1568
 00FFF87A 097121                          sta             KeyState2
1569
 00FFF87C 020006                          bra             dbgk8
1570
                              dbgk7:
1571
 00FFF87E 096121                          lda             KeyState2
1572
 00FFF880 084FFB                          anda    #~4
1573
 00FFF882 097121                          sta             KeyState2
1574
                              dbgk8:
1575
 00FFF884 00F120                          clr             KeyState1
1576
 00FFF886 020FB5                          bra             dbgk2
1577
                              dbgkNotCtrl:
1578
 00FFF888 0C1059                          cmpb    #SC_RSHIFT
1579
 00FFF88A 026016                          bne             dbgkNotRshift
1580
 00FFF88C 00D120                          tst             KeyState1
1581
 00FFF88E 02B008                          bmi             dbgk9
1582
 00FFF890 096121                          lda             KeyState2
1583
 00FFF892 08A001                          ora             #1
1584
 00FFF894 097121                          sta             KeyState2
1585
 00FFF896 020006                          bra             dbgk10
1586
                              dbgk9:
1587
 00FFF898 096121                          lda             KeyState2
1588
 00FFF89A 084FFE                          anda    #~1
1589
 00FFF89C 097121                          sta             KeyState2
1590
                              dbgk10:
1591
 00FFF89E 00F120                          clr             KeyState1
1592
 00FFF8A0 020F9B                          bra             dbgk2
1593
                              dbgkNotRshift:
1594
 00FFF8A2 0C1077                          cmpb    #SC_NUMLOCK
1595
 00FFF8A4 026013                          bne             dbgkNotNumlock
1596
 00FFF8A6 096121                          lda             KeyState2
1597
 00FFF8A8 088010                          eora    #16
1598
 00FFF8AA 097121                          sta             KeyState2
1599
 00FFF8AC 096122                          lda             KeyLED
1600
 00FFF8AE 088002                          eora    #2
1601
 00FFF8B0 097122                          sta             KeyLED
1602
 00FFF8B2 01F089                          tfr             a,b
1603
 00FFF8B4 04F                             clra
1604
 00FFF8B5 08DED2                          bsr             KeybdSetLED
1605
 00FFF8B7 020F84                          bra             dbgk2
1606
                              dbgkNotNumlock:
1607
 00FFF8B9 0C1058                          cmpb    #SC_CAPSLOCK
1608
 00FFF8BB 026013                          bne             dbgkNotCapslock
1609
 00FFF8BD 096121                          lda             KeyState2
1610
 00FFF8BF 088020                          eora    #32
1611
 00FFF8C1 097121                          sta             KeyState2
1612
 00FFF8C3 096122                          lda             KeyLED
1613
 00FFF8C5 088004                          eora    #4
1614
 00FFF8C7 097122                          sta             KeyLED
1615
 00FFF8C9 01F089                          tfr             a,b
1616
 00FFF8CB 04F                             clra
1617
 00FFF8CC 08DEBB                          bsr             KeybdSetLED
1618
 00FFF8CE 020F6D                          bra             dbgk2
1619
                              dbgkNotCapslock:
1620
 00FFF8D0 0C107E                          cmpb    #SC_SCROLLLOCK
1621
 00FFF8D2 026013                          bne             dbgkNotScrolllock
1622
 00FFF8D4 096121                          lda             KeyState2
1623
 00FFF8D6 088040                          eora    #64
1624
 00FFF8D8 097121                          sta             KeyState2
1625
 00FFF8DA 096122                          lda             KeyLED
1626
 00FFF8DC 088001                          eora    #1
1627
 00FFF8DE 097122                          sta             KeyLED
1628
 00FFF8E0 01F089                          tfr             a,b
1629
 00FFF8E2 04F                             clra
1630
 00FFF8E3 08DEA4                          bsr             KeybdSetLED
1631
 00FFF8E5 020F56                          bra             dbgk2
1632
                              dbgkNotScrolllock:
1633
 00FFF8E7 0C1011                          cmpb    #SC_ALT
1634
 00FFF8E9 026016                          bne             dbgkNotAlt
1635
 00FFF8EB 00D120                          tst             KeyState1
1636
 00FFF8ED 02B008                          bmi             dbgk11
1637
 00FFF8EF 096121                          lda             KeyState2
1638
 00FFF8F1 08A002                          ora             #2
1639
 00FFF8F3 097121                          sta             KeyState2
1640
 00FFF8F5 020006                          bra             dbgk12
1641
                              dbgk11:
1642
 00FFF8F7 096121                          lda             KeyState2
1643
 00FFF8F9 084FFD                          anda    #~2
1644
 00FFF8FB 097121                          sta             KeyState2
1645
                              dbgk12:
1646
 00FFF8FD 00F120                          clr             KeyState1
1647
 00FFF8FF 020F3C                          bra             dbgk2
1648
                              dbgkNotAlt:
1649
 00FFF901 00D120                          tst             KeyState1
1650
 00FFF903 027004                          beq             dbgk13
1651
 00FFF905 00F120                          clr             KeyState1
1652
 00FFF907 020F34                          bra             dbgk2
1653
                              dbgk13:
1654
 00FFF909 096121                          lda             KeyState2               ; Check for CTRL-ALT-DEL
1655
 00FFF90B 084006                          anda    #6
1656
 00FFF90D 081006                          cmpa    #6
1657
 00FFF90F 026008                          bne             dbgk14
1658
 00FFF911 0C1071                          cmpb    #SC_DEL
1659
 00FFF913 026004                          bne             dbgk14
1660
 00FFF915 06E90FFFFFFE                    jmp             [$FFFFFE]               ; jump to reset vector
1661
                              dbgk14:
1662
 00FFF919 00D121                          tst             KeyState2               ; extended code?
1663
 00FFF91B 02A00B                          bpl             dbgk15
1664
 00FFF91D 096121                          lda             KeyState2
1665
 00FFF91F 0847FF                          anda    #$7FF
1666
 00FFF921 097121                          sta             KeyState2
1667
 00FFF923 08EFFF680                       ldx             #keybdExtendedCodes
1668
 00FFF926 020017                          bra             dbgk18
1669
                              dbgk15:
1670
 00FFF928 096121                          lda             KeyState2               ; Is CTRL down?
1671
 00FFF92A 085004                          bita    #4
1672
 00FFF92C 027005                          beq             dbgk16
1673
 00FFF92E 08EFFF600                       ldx             #keybdControlCodes
1674
 00FFF931 02000C                          bra             dbgk18
1675
                              dbgk16:
1676
 00FFF933 085001                          bita    #1                                      ; Is shift down?
1677
 00FFF935 027005                          beq             dbgk17
1678
 00FFF937 08EFFF500                       ldx             #shiftedScanCodes
1679
 00FFF93A 020003                          bra             dbgk18
1680
                              dbgk17:
1681
 00FFF93C 08EFFF400                       ldx             #unshiftedScanCodes
1682
                              dbgk18:
1683
 00FFF93F 03A                             abx
1684
 00FFF940 0E6804                          ldb             ,x
1685
 00FFF942 04F                             clra
1686
 00FFF943 035090                          puls    x,pc                            ; and return
1687
 
1688
 
1689
 00FFF945 04B04505904204F041052           fcb             "KEYBOARD"
1690
 00FFF94C 044
1691
 00FFF94D FFF957                          fcw             KeybdOpen
1692
 00FFF94F FFF958                          fcw             KeybdClose
1693
 00FFF951 FFF959                          fcw             KeybdRead
1694
 00FFF953 FFF95A                          fcw             KeybdWrite
1695
 00FFF955 FFF95B                          fcw             KeybdSeek
1696
 
1697
                              ; Keyboard Open:
1698
                              ; Initialize the keyboard buffer head and tail indexes
1699
                              ;
1700
                              KeybdOpen:
1701
 00FFF957 039                             rts
1702
 
1703
                              ; Keyboard Close:
1704
                              ; Nothing to do except maybe clear the keyboard buffer
1705
                              ;
1706
                              KeybdClose:
1707
 00FFF958 039                             rts
1708
                              ;
1709
                              KeybdRead:
1710
 00FFF959 039                             rts
1711
                              ;
1712
                              KeybdWrite:
1713
 00FFF95A 039                             rts
1714
 
1715
                              KeybdSeek:
1716
 00FFF95B 039                             rts
1717
 
1718
                              ;------------------------------------------------------------------------------
1719
                              ; Check if there is a keyboard character available. If so return true (<0)
1720
                              ; otherwise return false (0) in accb.
1721
                              ;------------------------------------------------------------------------------
1722
                              ;
1723
                              KeybdCheckForKeyDirect:
1724
 00FFF95C 020EDB                          bra             DBGCheckForKey
1725
 
1726
                              ;------------------------------------------------------------------------------
1727
                              ;------------------------------------------------------------------------------
1728
                              INCH:
1729
 00FFF95E 0CCFFFFFF                       ldd             #-1                             ; block if no key available
1730
 00FFF961 020ED8                          bra             DBGGetKey
1731
 
1732
                              INCHE:
1733
 00FFF963 08DFF9                          bsr             INCH
1734
 00FFF965 020009                          bra             INCHEK3
1735
 
1736
                              INCHEK:
1737
 00FFF967 08DFF5                          bsr             INCH
1738
 00FFF969 01507DFFFFFCA00                 tst             KeybdEcho
1739
 00FFF96E 02700B                          beq             INCHEK1
1740
                              INCHEK3:
1741
 00FFF970 08100D                          cmpa    #CR
1742
 00FFF972 026005                          bne             INCHEK2
1743
 00FFF974 017FFD75B                       lbsr            CRLF
1744
*** warning 1: Long branch within short branch range could be optimized
1745
 00FFF977 020002                          bra             INCHEK1
1746
                              INCHEK2:
1747
 00FFF979 08D920                          bsr             DisplayChar
1748
                              INCHEK1:
1749
 00FFF97B 039                             rts
1750
 
1751
                              OUTCH:
1752
 00FFF97C 06E90F000800                    jmp             [CharOutVec]
1753
 
1754
                              ;------------------------------------------------------------------------------
1755
                              ; r1 0=echo off, non-zero = echo on
1756
                              ;------------------------------------------------------------------------------
1757
                              ;
1758
                              SetKeyboardEcho:
1759
 00FFF980 0150F7FFFFFCA00                 stb             KeybdEcho
1760
 00FFF985 039                             rts
1761
 
1762
 
1763
                              ;------------------------------------------------------------------------------
1764
                              ; Parameters:
1765
                              ;               x,d     bitmap of sprites to enable
1766
                              ;------------------------------------------------------------------------------
1767
 
1768
                              ShowSprites:
1769
 00FFF986 0150BFFFFE103C0                 stx             SPRITE_CTRL+SPRITE_EN
1770
 00FFF98B 0150FDFFFE103C2                 std             SPRITE_CTRL+SPRITE_EN+2
1771
 00FFF990 039                             rts
1772
 
1773
                              ;==============================================================================
1774
                              ; System Monitor
1775
                              ;==============================================================================
1776
                              ;
1777
                              MonitorStart:
1778
 00FFF991 0CCFFFAEF                       ldd             #HelpMsg
1779
 00FFF994 08D9BE                          bsr             DisplayString
1780
                              Monitor:
1781
 00FFF996 03280F003FFF                    leas    $3FFF                           ; reset stack pointer
1782
 00FFF99A 05F                             clrb                                                    ; turn off keyboard echo
1783
 00FFF99B 08DFE3                          bsr             SetKeyboardEcho
1784
                              ;       jsr             RequestIOFocus
1785
                              PromptLn:
1786
 00FFF99D 017FFD732                       lbsr    CRLF
1787
*** warning 1: Long branch within short branch range could be optimized
1788
 00FFF9A0 0C6024                          ldb             #'$'
1789
 00FFF9A2 08DFD8                          bsr             OUTCH
1790
 
1791
                              ; Get characters until a CR is keyed
1792
 
1793
                              Prompt3:
1794
 00FFF9A4 0CCFFFFFF                       ldd             #-1                                     ; block until key present
1795
 00FFF9A7 08DE92                          bsr             DBGGetKey
1796
 00FFF9A9 0C100D                          cmpb    #CR
1797
 00FFF9AB 027004                          beq             Prompt1
1798
 00FFF9AD 08DFCD                          bsr             OUTCH
1799
 00FFF9AF 020FF3                          bra             Prompt3
1800
 
1801
                              ; Process the screen line that the CR was keyed on
1802
                              ;
1803
                              Prompt1:
1804
 00FFF9B1 0CC005050                       ldd             #$5050
1805
 00FFF9B4 0150FDFFFE60000                 std             LEDS
1806
 00FFF9B9 0F6800000                       ldb             RunningID
1807
 00FFF9BC 0C103D                          cmpb    #61
1808
 00FFF9BE 022FE4                          bhi             Prompt3
1809
 00FFF9C0 0CC005151                       ldd             #$5151
1810
 00FFF9C3 0150FDFFFE60000                 std             LEDS
1811
 00FFF9C8 00F111                          clr             CursorCol                       ; go back to the start of the line
1812
 00FFF9CA 08D8AD                          bsr             CalcScreenLoc   ; calc screen memory location
1813
 00FFF9CC 01F002                          tfr             d,y
1814
 00FFF9CE 0CC005252                       ldd             #$5252
1815
 00FFF9D1 0150FDFFFE60000                 std             LEDS
1816
 00FFF9D6 08D055                          bsr             MonGetNonSpace
1817
 00FFF9D8 0C1024                          cmpb    #'$'
1818
 00FFF9DA 026009                          bne             Prompt2                 ; skip over '$' prompt character
1819
 00FFF9DC 086353                          lda             #$5353
1820
 00FFF9DE 0150FDFFFE60000                 std             LEDS
1821
 00FFF9E3 08D048                          bsr             MonGetNonSpace
1822
 
1823
                              ; Dispatch based on command character
1824
                              ;
1825
                              Prompt2:
1826
 00FFF9E5 0C103F                          cmpb    #'?'                    ; $? - display help
1827
 00FFF9E7 026007                          bne             PromptC
1828
 00FFF9E9 0CCFFFAEF                       ldd             #HelpMsg
1829
 00FFF9EC 08D966                          bsr             DisplayString
1830
 00FFF9EE 020FA6                          bra             Monitor
1831
                              PromptC:
1832
 00FFF9F0 0C1043                          cmpb    #'C'
1833
 00FFF9F2 026007                          bne             PromptD
1834
 00FFF9F4 017FFF7D9                       lbsr            ClearScreen
1835
*** warning 1: Long branch within short branch range could be optimized
1836
 00FFF9F7 08D848                          bsr             HomeCursor
1837
 00FFF9F9 020F9B                          bra             Monitor
1838
                              PromptD:
1839
 00FFF9FB 0C1044                          cmpb    #'D'
1840
 00FFF9FD 026008                          bne             PromptF
1841
 00FFF9FF 08D027                          bsr             MonGetch
1842
 00FFFA01 0C1052                          cmpb    #'R'
1843
 00FFFA03 026F9F                          bne             Prompt3
1844
 00FFFA05 020193                          bra             DumpRegs
1845
                              PromptF:
1846
 00FFFA07 0C1046                          cmpb    #'F'
1847
 00FFFA09 02600F                          bne             PromptJ
1848
 00FFFA0B 08D01B                          bsr             MonGetch
1849
 00FFFA0D 0C1049                          cmpb    #'I'
1850
 00FFFA0F 026F85                          bne             Monitor
1851
 00FFFA11 08D015                          bsr             MonGetch
1852
 00FFFA13 0C1047                          cmpb    #'G'
1853
 00FFFA15 026F7F                          bne             Monitor
1854
 00FFFA17 07EFE0000                       jmp             $FE0000
1855
                              PromptJ:
1856
 00FFFA1A 0C104A                          cmpb    #'J'
1857
 00FFFA1C 1270001BF                       lbeq    jump_to_code
1858
                              PromptR:
1859
 00FFFA1F 0C1052                          cmpb    #'R'
1860
 00FFFA21 026F73                          bne             Monitor
1861
 00FFFA23 017FFE5DA                       lbsr    ramtest
1862
*** warning 1: Long branch within short branch range could be optimized
1863
 00FFFA26 020F6E                          bra             Monitor
1864
 
1865
                              MonGetch:
1866
 00FFFA28 0E6A04                          ldb             ,y
1867
 00FFFA2A 031201                          leay    1,y
1868
 00FFFA2C 039                             rts
1869
 
1870
                              MonGetNonSpace:
1871
 00FFFA2D 08DFF9                          bsr             MonGetCh
1872
 00FFFA2F 0C1020                          cmpb    #' '
1873
 00FFFA31 027FFA                          beq             MonGetNonSpace
1874
 00FFFA33 0C1009                          cmpb    #9              ; tab
1875
 00FFFA35 027FF6                          beq             MonGetNonSpace
1876
 00FFFA37 039                             rts
1877
 
1878
                              ;------------------------------------------------------------------------------
1879
                              ; Ignore blanks in the input
1880
                              ; Y = text pointer
1881
                              ; D destroyed
1882
                              ;------------------------------------------------------------------------------
1883
                              ;
1884
                              ignBlanks:
1885
                              ignBlanks1:
1886
 00FFFA38 08DFEE                          bsr             MonGetch
1887
 00FFFA3A 0C1020                          cmpb    #' '
1888
 00FFFA3C 027FFA                          beq             ignBlanks1
1889
 00FFFA3E 0313FF                          leay    -1,y
1890
 00FFFA40 039                             rts
1891
 
1892
                              ;------------------------------------------------------------------------------
1893
                              ;------------------------------------------------------------------------------
1894
                              GetTwoParams:
1895
 00FFFA41 08DFF5                          bsr             ignBlanks
1896
 00FFFA43 08D02E                          bsr             GetHexNumber    ; get start address of dump
1897
 00FFFA45 0DC910                          ldd             mon_numwka
1898
 00FFFA47 0DD920                          std             mon_r1
1899
 00FFFA49 0DC912                          ldd             mon_numwka+2
1900
 00FFFA4B 0DD922                          std             mon_r1+2
1901
 00FFFA4D 08DFE9                          bsr             ignBlanks
1902
 00FFFA4F 08D022                          bsr             GetHexNumber    ; get end address of dump
1903
 00FFFA51 0DC910                          ldd             mon_numwka
1904
 00FFFA53 0DD922                          std             mon_r2
1905
 00FFFA55 0DC912                          ldd             mon_numwka+2
1906
 00FFFA57 0DD924                          std             mon_r2+2
1907
 00FFFA59 039                             rts
1908
 
1909
                              ;------------------------------------------------------------------------------
1910
                              ; Get a range, the end must be greater or equal to the start.
1911
                              ;------------------------------------------------------------------------------
1912
                              GetRange:
1913
 00FFFA5A 08DFE5                          bsr             GetTwoParams
1914
 00FFFA5C 0DC924                          ldd             mon_r2+2
1915
 00FFFA5E 093922                          subd    mon_r1+2
1916
 00FFFA60 0DC922                          ldd             mon_r2
1917
 00FFFA62 0D2921                          sbcb    mon_r1+1
1918
 00FFFA64 092920                          sbca    mon_r1
1919
 00FFFA66 12500006C                       lbcs    DisplayErr
1920
 00FFFA69 039                             rts
1921
 
1922
                              shl_numwka:
1923
 00FFFA6A 008913                          asl             mon_numwka+3
1924
 00FFFA6C 009912                          rol             mon_numwka+2
1925
 00FFFA6E 009911                          rol             mon_numwka+1
1926
 00FFFA70 009910                          rol             mon_numwka
1927
 00FFFA72 039                             rts
1928
 
1929
                              ;------------------------------------------------------------------------------
1930
                              ; Get a hexidecimal number. Maximum of nine digits.
1931
                              ; Y = text pointer (updated)
1932
                              ; D = number of digits
1933
                              ; mon_numwka contains number
1934
                              ;------------------------------------------------------------------------------
1935
                              ;
1936
                              GetHexNumber:
1937
 00FFFA73 04F05F                          clrd
1938
 00FFFA75 0DD910                          std             mon_numwka
1939
 00FFFA77 0DD912                          std             mon_numwka+2
1940
 00FFFA79 034010                          pshs    x
1941
 00FFFA7B 08E000000                       ldx             #0                                      ; max 9 eight digits
1942
                              gthxn2:
1943
 00FFFA7E 08DFA8                          bsr             MonGetch
1944
 00FFFA80 08D01D                          bsr             AsciiToHexNybble
1945
 00FFFA82 0C1FFF                          cmpb    #-1
1946
 00FFFA84 027015                          beq             gthxn1
1947
 00FFFA86 08DFE2                          bsr             shl_numwka
1948
 00FFFA88 08DFE0                          bsr             shl_numwka
1949
 00FFFA8A 08DFDE                          bsr             shl_numwka
1950
 00FFFA8C 08DFDC                          bsr             shl_numwka
1951
 00FFFA8E 0C400F                          andb    #$0f
1952
 00FFFA90 0DA913                          orb             mon_numwka+3
1953
 00FFFA92 0D7913                          stb             mon_numwka+3
1954
 00FFFA94 030001                          inx
1955
 00FFFA96 08C000009                       cmpx    #9
1956
 00FFFA99 025FE3                          blo             gthxn2
1957
                              gthxn1:
1958
 00FFFA9B 01F010                          tfr             x,d
1959
 00FFFA9D 035090                          puls    x,pc
1960
 
1961
                              ;GetDecNumber:
1962
                              ;       phx
1963
                              ;       push    r4
1964
                              ;       push    r5
1965
                              ;       ldx             #0
1966
                              ;       ld              r4,#10
1967
                              ;       ld              r5,#10
1968
                              ;gtdcn2:
1969
                              ;       jsr             MonGetch
1970
                              ;       jsr             AsciiToDecNybble
1971
                              ;       cmp             #-1
1972
                              ;       beq             gtdcn1
1973
                              ;       mul             r2,r2,r5
1974
                              ;       add             r2,r1
1975
                              ;       dec             r4
1976
                              ;       bne             gtdcn2
1977
                              ;gtdcn1:
1978
                              ;       txa
1979
                              ;       pop             r5
1980
                              ;       pop             r4
1981
                              ;       plx
1982
                              ;       rts
1983
 
1984
                              ;------------------------------------------------------------------------------
1985
                              ; Convert ASCII character in the range '0' to '9', 'a' to 'f' or 'A' to 'F'
1986
                              ; to a hex nybble.
1987
                              ;------------------------------------------------------------------------------
1988
                              ;
1989
                              AsciiToHexNybble:
1990
 00FFFA9F 0C1030                          cmpb    #'0'
1991
 00FFFAA1 024021                          bcc             gthx3
1992
 00FFFAA3 0C103A                          cmpb    #'9'+1
1993
 00FFFAA5 025003                          bcs             gthx5
1994
 00FFFAA7 0C0030                          subb    #'0'
1995
 00FFFAA9 039                             rts
1996
                              gthx5:
1997
 00FFFAAA 0C1041                          cmpb    #'A'
1998
 00FFFAAC 024016                          bcc             gthx3
1999
 00FFFAAE 0C1047                          cmpb    #'F'+1
2000
 00FFFAB0 025005                          bcs             gthx6
2001
 00FFFAB2 0C0041                          subb    #'A'
2002
 00FFFAB4 0CB00A                          addb    #10
2003
 00FFFAB6 039                             rts
2004
                              gthx6:
2005
 00FFFAB7 0C1061                          cmpb    #'a'
2006
 00FFFAB9 024009                          bcc             gthx3
2007
 00FFFABB 0C107B                          cmpb    #'z'+1
2008
 00FFFABD 025005                          bcs             gthx3
2009
 00FFFABF 0C0061                          subb    #'a'
2010
 00FFFAC1 0CB00A                          addb    #10
2011
 00FFFAC3 039                             rts
2012
                              gthx3:
2013
 00FFFAC4 0C6FFF                          ldb             #-1             ; not a hex number
2014
 00FFFAC6 039                             rts
2015
 
2016
                              AsciiToDecNybble:
2017
 00FFFAC7 0C1030                          cmpb    #'0'
2018
 00FFFAC9 024007                          bcc             gtdc3
2019
 00FFFACB 0C103A                          cmpb    #'9'+1
2020
 00FFFACD 025003                          bcs             gtdc3
2021
 00FFFACF 0C0030                          subb    #'0'
2022
 00FFFAD1 039                             rts
2023
                              gtdc3:
2024
 00FFFAD2 0C6FFF                          ldb             #-1
2025
 00FFFAD4 039                             rts
2026
 
2027
                              DisplayErr:
2028
 00FFFAD5 08EFFFAE7                       ldx             #msgErr
2029
 00FFFAD8 04F05F                          clrd
2030
 00FFFADA 08D003                          bsr             DisplayStringDX
2031
 00FFFADC 07EFFF996                       jmp             Monitor
2032
 
2033
                              DisplayStringDX
2034
 00FFFADF 0DD024                          std             Strptr
2035
 00FFFAE1 09F026                          stx             Strptr+2
2036
 00FFFAE3 0BDFFF354                       jsr             DisplayString
2037
 00FFFAE6 039                             rts
2038
 
2039
                              msgErr:
2040
 00FFFAE7 02A02A04507207200D00A           fcb     "**Err",CR,LF,0
2041
 00FFFAEE 000
2042
 
2043
                              HelpMsg:
2044
 00FFFAEF 03F02003D020044069073           fcb             "? = Display help",CR,LF
2045
 00FFFAF6 07006C061079020068065
2046
 00FFFAFD 06C07000D00A
2047
 00FFFB01 04304C05302003D020063           fcb     "CLS = clear screen",CR,LF
2048
 00FFFB08 06C065061072020073063
2049
 00FFFB0F 07206506506E00D00A
2050
                              ;       db      "S = Boot from SD Card",CR,LF
2051
                              ;       db      ": = Edit memory bytes",CR,LF
2052
                              ;       db      "L = Load sector",CR,LF
2053
                              ;       db      "W = Write sector",CR,LF
2054
 00FFFB15 04405202003D020044075           fcb "DR = Dump registers",CR,LF
2055
 00FFFB1C 06D070020072065067069
2056
 00FFFB23 07307406507207300D00A
2057
                              ;       db      "D = Dump memory",CR,LF
2058
                              ;       db      "F = Fill memory",CR,LF
2059
                              ;       db  "FL = Dump I/O Focus List",CR,LF
2060
 00FFFB2A 04604904702003D020073           fcb "FIG = start FIG Forth",CR,LF
2061
 00FFFB31 074061072074020046049
2062
 00FFFB38 04702004606F072074068
2063
 00FFFB3F 00D00A
2064
                              ;       db      "KILL n = kill task #n",CR,LF
2065
                              ;       db      "B = start tiny basic",CR,LF
2066
                              ;       db      "b = start EhBasic 6502",CR,LF
2067
 00FFFB41 04A02003D02004A07506D           fcb     "J = Jump to code",CR,LF
2068
 00FFFB48 07002007406F02006306F
2069
 00FFFB4F 06406500D00A
2070
 00FFFB53 05204104D02003D020074           fcb "RAM = test RAM",CR,LF
2071
 00FFFB5A 06507307402005204104D
2072
 00FFFB61 00D00A
2073
                              ;       db      "R[n] = Set register value",CR,LF
2074
                              ;       db      "r = random lines - test bitmap",CR,LF
2075
                              ;       db      "e = ethernet test",CR,LF
2076
                              ;       db      "T = Dump task list",CR,LF
2077
                              ;       db      "TO = Dump timeout list",CR,LF
2078
                              ;       db      "TI = display date/time",CR,LF
2079
                              ;       db      "TEMP = display temperature",CR,LF
2080
                              ;       db      "P = Piano",CR,LF,0
2081
 00FFFB63 000                             fcb             0
2082
 
2083
                              msgRegHeadings
2084
 00FFFB64 00D00A02004402F041042           fcb     CR,LF," D/AB   X    Y    U    S     PC    DP CCR",CR,LF,0
2085
 00FFFB6B 020020020058020020020
2086
 00FFFB72 020059020020020020055
2087
 00FFFB79 020020020020053020020
2088
 00FFFB80 020020020050043020020
2089
 00FFFB87 020020044050020043043
2090
 00FFFB8E 05200D00A000
2091
 
2092
                              nHEX4:
2093
 00FFFB92 0BDFFD2D2                       jsr             HEX4
2094
 00FFFB95 039                             rts
2095
 
2096
                              nXBLANK:
2097
 00FFFB96 0C6020                          ldb             #' '
2098
 00FFFB98 020DE2                          bra             OUTCH
2099
 
2100
                              DumpRegs
2101
 00FFFB9A 08EFFFB64                       ldx             #msgRegHeadings
2102
 00FFFB9D 0CC0000FF                       ldd             #msgRegHeadings>>16
2103
 00FFFBA0 0BDFFFADF                       jsr             DisplayStringDX
2104
 00FFFBA3 08DFF1                          bsr             nXBLANK
2105
 00FFFBA5 0DC900                          ldd             mon_DSAVE
2106
 00FFFBA7 08DFE9                          bsr             nHEX4
2107
 00FFFBA9 08DFEB                          bsr             nXBLANK
2108
 00FFFBAB 0DC902                          ldd             mon_XSAVE
2109
 00FFFBAD 08DFE3                          bsr             nHEX4
2110
 00FFFBAF 08DFE5                          bsr             nXBLANK
2111
 00FFFBB1 0DC904                          ldd             mon_YSAVE
2112
 00FFFBB3 08DFDD                          bsr             nHEX4
2113
 00FFFBB5 08DFDF                          bsr             nXBLANK
2114
 00FFFBB7 0DC906                          ldd             mon_USAVE
2115
 00FFFBB9 08DFD7                          bsr             nHEX4
2116
 00FFFBBB 08DFD9                          bsr             nXBLANK
2117
 00FFFBBD 0DC908                          ldd             mon_SSAVE
2118
 00FFFBBF 08DFD1                          bsr             nHEX4
2119
 00FFFBC1 08DFD3                          bsr             nXBLANK
2120
 00FFFBC3 0DC90A                          ldd             mon_PCSAVE
2121
 00FFFBC5 08DFCB                          bsr             nHEX4
2122
 00FFFBC7 0DC90C                          ldd             mon_PCSAVE+2
2123
 00FFFBC9 08DFC7                          bsr             nHEX4
2124
 00FFFBCB 08DFC9                          bsr             nXBLANK
2125
 00FFFBCD 0DC90E                          ldd             mon_DPRSAVE
2126
 00FFFBCF 0BDFFD2CE                       jsr             HEX2
2127
 00FFFBD2 08DFC2                          bsr             nXBLANK
2128
 00FFFBD4 09690F                          lda             mon_CCRSAVE
2129
 00FFFBD6 0BDFFD2CE                       jsr             HEX2
2130
 00FFFBD9 08DFBB                          bsr             nXBLANK
2131
 00FFFBDB 07EFFF996                       jmp             Monitor
2132
 
2133
                              ; Jump to code
2134
                              jump_to_code:
2135
 00FFFBDE 08DE93                          bsr             GetHexNumber
2136
 00FFFBE0 01A010                          sei
2137
 00FFFBE2 1DE908                          lds             mon_SSAVE
2138
 00FFFBE4 0CCFFFC11                       ldd             #
2139
 00FFFBE7 034006                          pshs    d
2140
 00FFFBE9 0CC000000                       ldd             #>jtc_exit
2141
 00FFFBEC 034004                          pshs    b
2142
 00FFFBEE 0DC912                          ldd             mon_numwka+2
2143
 00FFFBF0 034006                          pshs    d
2144
 00FFFBF2 0DC910                          ldd             mon_numwka
2145
 00FFFBF4 034006                          pshs    d
2146
 00FFFBF6 0DC906                          ldd             mon_USAVE
2147
 00FFFBF8 034006                          pshs    d
2148
 00FFFBFA 0DC904                          ldd             mon_YSAVE
2149
 00FFFBFC 034006                          pshs    d
2150
 00FFFBFE 0DC902                          ldd             mon_XSAVE
2151
 00FFFC00 034006                          pshs    d
2152
 00FFFC02 09690E                          lda             mon_DPRSave
2153
 00FFFC04 034002                          pshs    a
2154
 00FFFC06 0DC900                          ldd             mon_DSAVE
2155
 00FFFC08 034006                          pshs    d
2156
 00FFFC0A 09690F                          lda             mon_CCRSAVE
2157
 00FFFC0C 034002                          pshs    a
2158
 00FFFC0E 0150350FF                       puls    far ccr,d,dpr,x,y,u,pc
2159
                              jtc_exit:
2160
 00FFFC11 034001                          pshs    ccr
2161
 00FFFC13 0DD900                          std             mon_DSAVE
2162
 00FFFC15 09F902                          stx             mon_XSAVE
2163
 00FFFC17 19F904                          sty             mon_YSAVE
2164
 00FFFC19 0DF906                          stu             mon_USAVE
2165
 00FFFC1B 01F0B8                          tfr             dpr,a
2166
 00FFFC1D 09790E                          sta             mon_DPRSAVE
2167
 00FFFC1F 035002                          puls    a
2168
 00FFFC21 09790F                          sta             mon_CCRSAVE
2169
 00FFFC23 1DF908                          sts             mon_SSAVE
2170
 00FFFC25 1CE003FFF                       lds             #$3FFF
2171
                                      ; todo set according to coreid
2172
 00FFFC28 07EFFFB9A                       jmp             DumpRegs
2173
 
2174
                              ;------------------------------------------------------------------------------
2175
                              ;------------------------------------------------------------------------------
2176
                              swi3_rout:
2177
 00FFFC2B 01A010                          sei
2178
 00FFFC2D 035002                          puls    a
2179
 00FFFC2F 09790F                          sta             mon_CCRSAVE
2180
 00FFFC31 03507E                          puls    D,DPR,X,Y,U
2181
 00FFFC33 0DD900                          std             mon_DSAVE
2182
 00FFFC35 09F902                          stx             mon_XSAVE
2183
 00FFFC37 19F904                          sty             mon_YSAVE
2184
 00FFFC39 0DF906                          stu             mon_USAVE
2185
 00FFFC3B 01F0B8                          tfr             dpr,a
2186
 00FFFC3D 09790E                          sta             mon_DPRSAVE
2187
 00FFFC3F 035006                          puls    D
2188
 00FFFC41 0DD90A                          std             mon_PCSAVE
2189
 00FFFC43 035006                          puls    D
2190
 00FFFC45 0DD90C                          std             mon_PCSAVE+2
2191
 00FFFC47 1DF908                          sts             mon_SSAVE
2192
 00FFFC49 1CE003FFF                       lds             #$3FFF
2193
 00FFFC4C 01C0EF                          cli
2194
 00FFFC4E 07EFFFB9A                       jmp             DumpRegs
2195
                              swi3_exit:
2196
 00FFFC51 01A010                          sei
2197
 00FFFC53 1DE908                          lds             mon_SSAVE
2198
 00FFFC55 0DC90C                          ldd             mon_PCSAVE+2
2199
 00FFFC57 034006                          pshs    d
2200
 00FFFC59 0DC90A                          ldd             mon_PCSAVE
2201
 00FFFC5B 034006                          pshs    d
2202
 00FFFC5D 0DE906                          ldu             mon_USAVE
2203
 00FFFC5F 19E904                          ldy             mon_YSAVE
2204
 00FFFC61 09E902                          ldx             mon_XSAVE
2205
 00FFFC63 034070                          pshs    x,y,u
2206
 00FFFC65 09690E                          lda             mon_DPRSAVE
2207
 00FFFC67 034002                          pshs    a
2208
 00FFFC69 0DC900                          ldd             mon_DSAVE
2209
 00FFFC6B 034006                          pshs    d
2210
 00FFFC6D 09690F                          lda             mon_CCRSAVE
2211
 00FFFC6F 034002                          pshs    a
2212
 00FFFC71 01F08A                          tfr             a,ccr
2213
 00FFFC73 01C0EF                          cli
2214
 00FFFC75 03B                             rti
2215
 
2216
                              ;------------------------------------------------------------------------------
2217
                              ;------------------------------------------------------------------------------
2218
                              irq_rout:
2219
                                      ; Reset the edge sense circuit in the PIC
2220
 00FFFC76 086002                          lda             #2                              ; Timer is IRQ #2
2221
 00FFFC78 0150B7FFFE3F006                 sta             PIC+6                   ; register 6 is edge sense reset reg
2222
 
2223
 00FFFC7D 09779A                          sta             IrqSource               ; stuff a byte indicating the IRQ source for PEEK()
2224
 00FFFC7F 0960DF                          lda             IrqBase                 ; get the IRQ flag byte
2225
 00FFFC81 044                             lsra
2226
 00FFFC82 09A0DF                          ora             IrqBase
2227
 00FFFC84 0840E0                          anda    #$E0
2228
 00FFFC86 0970DF                          sta             IrqBase
2229
 
2230
 00FFFC88 01507CFFFE0006E                 inc             TEXTSCR+110             ; update IRQ live indicator on screen
2231
 
2232
                                      ; flash the cursor
2233
                                      ; only bother to flash the cursor for the task with the IO focus.
2234
 00FFFC8D 0150B6FFFFFFFE0                 lda             COREID
2235
 00FFFC92 091100                          cmpa    IOFocusID
2236
 00FFFC94 026021                          bne             tr1a
2237
 00FFFC96 096114                          lda             CursorFlash             ; test if we want a flashing cursor
2238
 00FFFC98 02701D                          beq             tr1a
2239
 00FFFC9A 017FFF5DC                       lbsr    CalcScreenLoc   ; compute cursor location in memory
2240
*** warning 1: Long branch within short branch range could be optimized
2241
 00FFFC9D 01F002                          tfr             d,y
2242
 00FFFC9F 0A6A09002000                    lda             $2000,y                 ; get color code $2000 higher in memory
2243
 00FFFCA3 0D67C6                          ldb             IRQFlag                 ; get counter
2244
 00FFFCA5 054                             lsrb
2245
 00FFFCA6 044                             lsra
2246
 00FFFCA7 044                             lsra
2247
 00FFFCA8 044                             lsra
2248
 00FFFCA9 044                             lsra
2249
 00FFFCAA 054                             lsrb
2250
 00FFFCAB 049                             rola
2251
 00FFFCAC 054                             lsrb
2252
 00FFFCAD 049                             rola
2253
 00FFFCAE 054                             lsrb
2254
 00FFFCAF 049                             rola
2255
 00FFFCB0 054                             lsrb
2256
 00FFFCB1 049                             rola
2257
 00FFFCB2 0A7A0A000E00000                 sta             $E00000,y               ; store the color code back to memory
2258
                              tr1a
2259
 00FFFCB7 03B                             rti
2260
 
2261
                              ;------------------------------------------------------------------------------
2262
                              ;------------------------------------------------------------------------------
2263
                              nmi_rout:
2264
 00FFFCB8 0150F6FFFFFFFE0                 ldb             COREID
2265
 00FFFCBD 086049                          lda             #'I'
2266
 00FFFCBF 08EE00028                       ldx             #TEXTSCR+40
2267
 00FFFCC2 03A                             abx
2268
 00FFFCC3 0A7804                          sta             ,x
2269
 00FFFCC5 03B                             rti
2270
 
2271
                                      org             $FFFFF0
2272
 00FFFFF0 012                             nop
2273
 00FFFFF1 012                             nop
2274
 00FFFFF2 FFFC2B                          fcw             swi3_rout
2275
 
2276
                                      org             $FFFFF8
2277
 00FFFFF8 FFFC76                          fcw             irq_rout
2278
 00FFFFFA FFF023                          fcw             start                           ; SWI
2279
 00FFFFFC FFFCB8                          fcw             nmi_rout                ; NMI
2280
 00FFFFFE FFF023                          fcw             start                           ; RST
2281
 
2282
8 warning(s) in pass 2.
2283
 
2284
SYMBOL TABLE
2285
 ASCIITODECNYBBLE 02 00FFFAC7 ASCIITOHEXNYBBLE 02 00FFFA9F BIOS_SCREENS 00 17000000 BLANKLINE 02 00FFF216
2286
 BLKCPYDST 00 00000020 BLKCPYSRC 00 0000001C   BLNKLN1 02 00FFF229 CALCSCREENLOC 02 00FFF279
2287
 CHARCOLOR 00 00000112 CHARINVEC 00 00000804 CHAROUTVEC 00 00000800 CHECKPOINT 02 00FFF0E0
2288
 CLEARSCREEN 02 00FFF1D0 CLEARSCREENJMP 02 00FFD300 COLORCODELOCATION 00 00000014 COPYSCREENTOVIRTUALSCREEN 02 00FFF1A0
2289
 COPYVIRTUALSCREENTOSCREEN 02 00FFF178    COREID 00 FFFFFFE0        CR 00 0000000D      CRLF 02 00FFD0D2
2290
     CRLF1 02 00FFD0D2    CRLFST 02 00FFF388       CS1 02 00FFF1DD       CS2 02 00FFF1F3
2291
     CS2V1 02 00FFF1AC       CS3 02 00FFF1F9      CSL1 02 00FFF293     CTRLC 00 00000003
2292
     CTRLH 00 00000008     CTRLI 00 00000009     CTRLJ 00 0000000A     CTRLK 00 0000000B
2293
     CTRLM 00 0000000D     CTRLS 00 00000013     CTRLX 00 00000018 CURSORCOL 00 00000111
2294
 CURSORFLASH 00 00000114 CURSORROW 00 00000110     CV2S1 02 00FFF184 DBGCHECKFORKEY 02 00FFF839
2295
 DBGGETKEY 02 00FFF83B     DBGK1 02 00FFF84F    DBGK10 02 00FFF89E    DBGK11 02 00FFF8F7
2296
    DBGK12 02 00FFF8FD    DBGK13 02 00FFF909    DBGK14 02 00FFF919    DBGK15 02 00FFF928
2297
    DBGK16 02 00FFF933    DBGK17 02 00FFF93C    DBGK18 02 00FFF93F     DBGK2 02 00FFF83D
2298
     DBGK3 02 00FFF854     DBGK4 02 00FFF862     DBGK5 02 00FFF86E     DBGK7 02 00FFF87E
2299
     DBGK8 02 00FFF884     DBGK9 02 00FFF898 DBGKNOTALT 02 00FFF901 DBGKNOTCAPSLOCK 02 00FFF8D0
2300
 DBGKNOTCTRL 02 00FFF888 DBGKNOTNUMLOCK 02 00FFF8B9 DBGKNOTRSHIFT 02 00FFF8A2 DBGKNOTSCROLLLOCK 02 00FFF8E7
2301
      DCCR 02 00FFF2A7      DCLF 02 00FFF32D     DCX10 02 00FFF2E1     DCX11 02 00FFF2F1
2302
     DCX12 02 00FFF2ED     DCX13 02 00FFF2FD     DCX14 02 00FFF2A5      DCX3 02 00FFF31B
2303
      DCX4 02 00FFF32F      DCX5 02 00FFF30A      DCX6 02 00FFF2B8      DCX7 02 00FFF2B4
2304
      DCX8 02 00FFF2C5      DCX9 02 00FFF2D2   DELAY3S 02 00FFF15B DISPBYTEASHEX 02 00FFF39D
2305
 DISPDWORDASHEX 02 00FFF38B DISPLAYCHAR 02 00FFF29B DISPLAYERR 02 00FFFAD5 DISPLAYSTRING 02 00FFF354
2306
 DISPLAYSTRINGCRLF 02 00FFF362 DISPLAYSTRINGDX 02 00FFFADF   DISPNYB 02 00FFF3B5  DISPNYB1 02 00FFF3C3
2307
 DISPWORDASHEX 02 00FFF394    DLY3S1 02 00FFF15E    DLY3S2 02 00FFF162 DRAM_BASE 00 10000000
2308
    DSPJ1B 02 00FFF358    DSRETB 02 00FFF360  DUMPREGS 02 00FFFB9A    DUMRTS 02 00FFF022
2309
 FIRST_CORE 00 00000001   FREEMBX 02 00000002   FREEMSG 02 00000006   FREETCB 00 0000078A
2310
 GETHEXNUMBER 02 00FFFA73  GETRANGE 02 00FFFA5A GETSCREENLOCATION 02 00FFF230 GETTWOPARAMS 02 00FFFA41
2311
      GSL1 02 00FFF23D     GTDC3 02 00FFFAD2     GTHX3 02 00FFFAC4     GTHX5 02 00FFFAAA
2312
     GTHX6 02 00FFFAB7    GTHXN1 02 00FFFA9B    GTHXN2 02 00FFFA7E       HC1 02 00FFF256
2313
   HELPMSG 02 00FFFAEF      HEX2 02 00FFD2CE      HEX4 02 00FFD2D2 HOMECURSOR 02 00FFF241
2314
 HOMECURSORJMP 02 00FFD308      ICC1 02 00FFF350      ICC2 02 00FFF352      ICR1 02 00FFF342
2315
 IGNBLANKS 02 00FFFA38 IGNBLANKS1 02 00FFFA38 INCCURSORPOS 02 00FFF331 INCCURSORROW 02 00FFF340
2316
      INCH 02 00FFF95E     INCHE 02 00FFF963    INCHEK 02 00FFF967   INCHEK1 02 00FFF97B
2317
   INCHEK2 02 00FFF979   INCHEK3 02 00FFF970      INIT 02 00FFF072 IOFOCUSID 00 00000100
2318
 IOFOCUSNDX 00 00000100   IRQBASE 00 000000DF   IRQFLAG 00 000007C6 IRQSOURCE 00 0000079A
2319
  IRQ_ROUT 02 00FFFC76  JTC_EXIT 02 00FFFC11 JUMP_TO_CODE 02 00FFFBDE  KBDI0002 02 00FFF7C5
2320
  KBDI0004 02 00FFF80A KBDITRYAGAIN 02 00FFF7FE     KBGS1 02 00FFF778     KBGS2 02 00FFF770
2321
     KBGS3 02 00FFF761     KEYBD 00 FFE30400  KEYBDACK 00 FFFFCC00  KEYBDBAD 00 FFFFCB00
2322
 KEYBDBUFFER 00 FFFFC000 KEYBDCHECKFORKEYDIRECT 02 00FFF95C KEYBDCLOSE 02 00FFF958  KEYBDCLR 00 FFE30402
2323
 KEYBDCONTROLCODES 02 00FFF600 KEYBDECHO 00 FFFFCA00 KEYBDEXTENDEDCODES 02 00FFF680 KEYBDGETID 02 00FFF79C
2324
 KEYBDGETSCANCODE 02 00FFF77D KEYBDGETSTATUS 02 00FFF761 KEYBDHEAD 00 FFFFC800   KEYBDID 00 00000124
2325
 KEYBDINIT 02 00FFF7C0 KEYBDLOCKS 00 FFFFCD00 KEYBDOPEN 02 00FFF957 KEYBDREAD 02 00FFF959
2326
 KEYBDRECVBYTE 02 00FFF700 KEYBDSEEK 02 00FFF95B KEYBDSENDBYTE 02 00FFF719 KEYBDSETLED 02 00FFF789
2327
 KEYBDTAIL 00 FFFFC900 KEYBDWAITTX 02 00FFF71F KEYBDWRITE 02 00FFF95A    KEYLED 00 00000122
2328
 KEYSTATE1 00 00000120 KEYSTATE2 00 00000121     KGID1 02 00FFF7B9  KGNOTKBD 02 00FFF7BC
2329
      KRB3 02 00FFF705      KRB4 02 00FFF715      KWT1 02 00FFF724      KWT2 02 00FFF735
2330
      LEDS 00 FFE60000    LEDXIT 02 00FFF81E    LETTER 02 00FFD2C1        LF 00 0000000A
2331
 MAX_TASKNO 00 0000003F  MONGETCH 02 00FFFA28 MONGETNONSPACE 02 00FFFA2D   MONITOR 02 00FFF996
2332
 MONITORSTART 02 00FFF991 MON_CCRSAVE 00 0000090F MON_DPRSAVE 00 0000090E MON_DSAVE 00 00000900
2333
 MON_NUMWKA 00 00000910 MON_PCSAVE 00 0000090A    MON_R1 00 00000920    MON_R2 00 00000922
2334
 MON_SSAVE 00 00000908 MON_USAVE 00 00000906 MON_XSAVE 00 00000902 MON_YSAVE 00 00000904
2335
   MSCOUNT 00 FFFFFFE4 MSGBADKEYBD 02 00FFF82A    MSGERR 02 00FFFAE7 MSGREGHEADINGS 02 00FFFB64
2336
 MSGSTARTUP 02 00FFF0BF MULTI_SIEVE 02 00FFF0F6 MULTI_SIEVE1 02 00FFF119 MULTI_SIEVE2 02 00FFF115
2337
 MULTI_SIEVE3 02 00FFF103 MULTI_SIEVE4 02 00FFF12C     NHEX4 02 00FFFB92  NMAILBOX 02 00000004
2338
   NMIBASE 00 000000DC  NMI_ROUT 02 00FFFCB8   NMSGBLK 02 00000008   NXBLANK 02 00FFFB96
2339
    ONEKEY 02 00FFD1DC     OUTCH 02 00FFF97C     PCRLF 02 00FFF374     PDATA 02 00FFF381
2340
       PIC 00 FFE3F000    PICPTR 00 00000028     PRINT 02 00FFF37E   PROMPT1 02 00FFF9B1
2341
   PROMPT2 02 00FFF9E5   PROMPT3 02 00FFF9A4   PROMPTC 02 00FFF9F0   PROMPTD 02 00FFF9FB
2342
   PROMPTF 02 00FFFA07   PROMPTJ 02 00FFFA1A  PROMPTLN 02 00FFF99D   PROMPTR 02 00FFFA1F
2343
    PSTRNG 02 00FFF370     QNDX0 00 00000780     QNDX1 00 00000782     QNDX2 00 00000784
2344
     QNDX3 00 00000786     QNDX4 00 00000788    RAMERR 02 00FFE02C   RAMTEST 02 00FFE000
2345
  RAMTEST1 02 00FFE00D  RAMTEST3 02 00FFE017  ROMTORAM 02 00FFF0E6 ROMTORAM1 02 00FFF0EC
2346
 RUNNINGID 00 00800000 RUNNINGTCB 06 00000000 SCREENCOLOR 00 00000113 SCREENLOCATION 00 00000010
2347
 SCREENLOCATION2 00 00000018  SCROLLUP 02 00FFF1FB    SCRUP1 02 00FFF208    SC_ALT 00 00000011
2348
      SC_C 00 00000021 SC_CAPSLOCK 00 00000058   SC_CTRL 00 00000014    SC_DEL 00 00000071
2349
 SC_EXTEND 00 000000E0    SC_F12 00 00000007  SC_KEYUP 00 000000F0 SC_NUMLOCK 00 00000077
2350
 SC_RSHIFT 00 00000059 SC_SCROLLLOCK 00 0000007E      SC_T 00 0000002C    SC_TAB 00 0000000D
2351
      SC_Z 00 0000001A SETKEYBOARDECHO 02 00FFF980 SHIFTEDSCANCODES 02 00FFF500 SHIFTLEFT5 02 00FFF16D
2352
 SHL_NUMWKA 02 00FFFA6A SHOWSPRITES 02 00FFF986     SIEVE 02 00FFF130    SIEVE1 02 00FFF148
2353
    SIEVE2 02 00FFF144    SIEVE3 02 00FFF135    SIEVE4 02 00FFF157 SKIP_INIT 02 00FFF08C
2354
 SPRITE_CTRL 00 FFE10000 SPRITE_EN 00 000003C0       ST1 02 00FFF079       ST3 02 00FFF069
2355
       ST6 02 00FFF030       ST7 02 00FFF03A       ST8 02 00FFF03A     START 02 00FFF023
2356
    STRPTR 00 00000024 SWI3_EXIT 02 00FFFC51 SWI3_ROUT 02 00FFFC2B       TAB 00 00000009
2357
 TCB_CURSORCOL 00 00000021 TCB_CURSORROW 00 00000020  TCB_HJCB 00 0000001C TCB_HWAITMBX 00 00000022
2358
 TCB_IOF_NEXT 00 0000002C TCB_IOF_PREV 00 00000030 TCB_MBQ_NEXT 00 00000024 TCB_MBQ_PREV 00 00000028
2359
 TCB_MMU_MAP 00 00000038 TCB_MSGPTR_D1 00 00000014 TCB_MSGPTR_D2 00 00000018 TCB_NXTRDY 00 00000000
2360
 TCB_NXTTCB 00 00000008 TCB_PRIORITY 00 00000010 TCB_PRVRDY 00 00000004 TCB_SPSAVE 00 00000034
2361
 TCB_STATUS 00 0000001E TCB_TIMEOUT 00 0000000C TEXTCLOSE 02 00FFF1CC  TEXTOPEN 02 00FFF1CB
2362
  TEXTREAD 02 00FFF1CD   TEXTREG 00 FFE0DF00   TEXTSCR 00 FFE00000  TEXTSEEK 02 00FFF1CF
2363
 TEXTWRITE 02 00FFF1CE TEXT_COLS 00 00000000 TEXT_CURPOS 00 00000022 TEXT_ROWS 00 00000001
2364
 TIMEOUTLIST 00 0000078C      TR1A 02 00FFFCB7      UCP1 02 00FFF277 UNSHIFTEDSCANCODES 02 00FFF400
2365
 UPDATECURSORPOS 02 00FFF258  W10_0001 02 00FFF740 W300_0001 02 00FFF754  WAIT10MS 02 00FFF739
2366
 WAIT300MS 02 00FFF74D    XBLANK 02 00FFD0AF      XOFF 00 00000013       XON 00 00000011
2367
328 SYMBOLS
2368
 
2369
 

powered by: WebSVN 2.1.0

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