URL
https://opencores.org/ocsvn/rf6809/rf6809/trunk
Subversion Repositories rf6809
Compare Revisions
- This comparison shows the changes necessary to convert path
/rf6809
- from Rev 12 to Rev 13
- ↔ Reverse comparison
Rev 12 → Rev 13
/trunk/rtl/cpu/rf6809.sv
232,6 → 232,11
; |
reg isDblIndirect; |
wire isIndirect = ndxbyte[bitsPerByte-4] & ndxbyte[bitsPerByte-1]; |
`ifdef TWELVEBIT |
always_comb |
isOuterIndexed = ndxbyte[bitsPerByte-5] & ndxbyte[bitsPerByte-1]; |
`endif |
|
assign ndxbyte = ir[`HIBYTE]; |
|
// Detect type of interrupt |
699,7 → 704,9
md32 <= `FALSE; |
ipg <= 2'b00; |
isFar <= `FALSE; |
`ifdef EIGHTBIT |
isOuterIndexed <= `FALSE; |
`endif |
dpr <= 12'h000; |
ibufadr <= {BPB*3{1'b0}}; |
// pc <= 24'hFFFFFE; |
1184,7 → 1191,9
bs_o <= 1'b0; |
next_state(DECODE); |
isFar <= `FALSE; |
`ifdef EIGHTBIT |
isOuterIndexed <= `FALSE; |
`endif |
ipg <= 2'b00; |
ia <= {bitsPerByte*3{1'b0}}; |
res <= 24'd0; |
1225,7 → 1234,9
else begin |
ipg <= ipg; |
isFar <= isFar; |
`ifdef EIGHTBIT |
isOuterIndexed <= isOuterIndexed; |
`endif |
next_state(ICACHE1); |
end |
end |
1236,7 → 1247,9
else begin |
ipg <= ipg; |
isFar <= isFar; |
`ifdef EIGHTBIT |
isOuterIndexed <= isOuterIndexed; |
`endif |
next_state(IBUF1); |
end |
end |
1299,7 → 1312,7
else if (bitsPerByte==12) begin |
casez(ndxbyte) |
12'b1??000000000: |
if (!isOuterIndexed && ndxbyte[7]==1'b0) |
if (!isOuterIndexed && ndxbyte[bitsPerByte-5]==1'b0) |
case(ndxbyte[10:9]) |
2'b00: xr <= (xr + 4'd1); |
2'b01: yr <= (yr + 4'd1); |
1307,7 → 1320,7
2'b11: ssp <= (ssp + 4'd1); |
endcase |
12'b1??000000001: |
if (!isOuterIndexed && ndxbyte[7]==1'b0) |
if (!isOuterIndexed && ndxbyte[bitsPerByte-5]==1'b0) |
case(ndxbyte[10:9]) |
2'b00: xr <= (xr + 4'd2); |
2'b01: yr <= (yr + 4'd2); |
1392,8 → 1405,9
`PG2: begin ipg <= 2'b01; ir <= ir[bitsPerByte*5-1:bitsPerByte]; next_state(DECODE); end |
`PG3: begin ipg <= 2'b10; ir <= ir[bitsPerByte*5-1:bitsPerByte]; next_state(DECODE); end |
`FAR: begin isFar <= `TRUE; ir <= ir[bitsPerByte*5-1:bitsPerByte]; next_state(DECODE); end |
`ifdef EIGHTBIT |
`OUTER: begin isOuterIndexed <= `TRUE; ir <= ir[bitsPerByte*5-1:bitsPerByte]; next_state(DECODE); end |
|
`endif |
`NEGA,`NEGB: begin res12 <= -acc[`LOBYTE]; a <= 24'h00; b <= acc; end |
`COMA,`COMB: begin res12 <= ~acc[`LOBYTE]; end |
`LSRA,`LSRB: begin res12 <= {acc[0],1'b0,acc[BPBM1:1]}; end |
/trunk/software/boot/boot_rom.asm
1,24 → 1,37
; ============================================================================ |
; __ |
; \\__/ o\ (C) 2013-2022 Robert Finch, Stratford |
; \\__/ o\ (C) 2013-2022 Robert Finch, Waterloo |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; This source file is free software: you can redistribute it and/or modify |
; it under the terms of the GNU Lesser General Public License as published |
; by the Free Software Foundation, either version 3 of the License, or |
; (at your option) any later version. |
; BSD 3-Clause License |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; |
; 1. Redistributions of source code must retain the above copyright notice, this |
; list of conditions and the following disclaimer. |
; |
; 2. Redistributions in binary form must reproduce the above copyright notice, |
; this list of conditions and the following disclaimer in the documentation |
; and/or other materials provided with the distribution. |
; |
; 3. Neither the name of the copyright holder nor the names of its |
; contributors may be used to endorse or promote products derived from |
; this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
; |
; This source file is distributed in the hope that it will be useful, |
; but WITHOUT ANY WARRANTY; without even the implied warranty of |
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
; GNU General Public License for more details. |
; |
; You should have received a copy of the GNU General Public License |
; along with this program. If not, see <http://www.gnu.org/licenses/>. |
; |
; ============================================================================ |
; |
CR EQU $0D ;ASCII equates |
31,6 → 44,7
CTRLK EQU $0B |
CTRLM EQU $0D |
CTRLS EQU $13 |
CTRLT EQU $14 |
CTRLX EQU $18 |
XON EQU $11 |
XOFF EQU $13 |
81,12 → 95,32
|
COREID EQU $FFFFFFFE0 |
MSCOUNT EQU $FFFFFFFE4 |
LEDS EQU $FFFE60000 |
LEDS EQU $FFFE60001 |
VIA EQU $FFFE60000 |
VIA_PA EQU 1 |
VIA_DDRA EQU 3 |
VIA_ACR EQU 11 |
VIA_IFR EQU 13 |
VIA_IER EQU 14 |
VIA_T3LL EQU 18 |
VIA_T3LH EQU 19 |
VIA_T3CMPL EQU 20 |
VIA_T3CMPH EQU 21 |
TEXTSCR EQU $FFFE00000 |
TEXTREG EQU $FFFE0DF00 |
TEXT_COLS EQU 0 |
TEXT_ROWS EQU 1 |
TEXT_CURPOS EQU 34 |
ACIA EQU $FFFE30100 |
ACIA_TX EQU 0 |
ACIA_RX EQU 0 |
ACIA_STAT EQU 1 |
ACIA_CMD EQU 2 |
ACIA_CTRL EQU 3 |
ACIA_CTRL2 EQU 11 |
RTC EQU $FFFE30500 ; I2C |
RTCBuf EQU $7FC0 |
|
KEYBD EQU $FFFE30400 |
KEYBDCLR EQU $FFFE30402 |
PIC EQU $FFFE3F000 |
93,18 → 127,26
SPRITE_CTRL EQU $FFFE10000 |
SPRITE_EN EQU $3C0 |
|
OUTSEMA EQU $EF0000 |
SEMAABS EQU $1000 |
OSSEMA EQU $EF0010 |
|
BIOS_SCREENS EQU $17000000 ; $17000000 to $171FFFFF |
|
; EhBASIC vars: |
; |
NmiBase EQU $DC |
IrqBase EQU $DF |
NmiBase EQU $FF0013 |
IrqBase EQU $FF0014 |
|
; The IO focus list is a doubly linked list formed into a ring. |
; |
IOFocusNdx EQU $100 |
IOFocusID EQU $100 |
|
; These variables in global OS storage area |
|
IOFocusList EQU $FF0000 ; to $FF000F |
IOFocusID EQU $FF0010 |
IrqSource EQU $FF0011 |
IRQFlag EQU $FF0012 |
|
; These variables use direct page access |
CursorRow EQU $110 |
CursorCol EQU $111 |
115,7 → 157,23
KeyState2 EQU $121 |
KeyLED EQU $122 |
KeybdID EQU $124 |
KeybdBlock EQU $126 |
kbdHeadRcv EQU $127 |
kbdTailRcv EQU $128 |
kbdFifo EQU $40 ; in local RAM |
kbdFifoAlias EQU $C00040 ; to $C0007F ; alias for $40 to $7F |
SerhZero EQU $130 |
SerHeadRcv EQU $131 |
SertZero EQU $132 |
SerTailRcv EQU $133 |
SerHeadXmit EQU $136 |
SerTailXmit EQU $138 |
SerRcvXon EQU $139 |
SerRcvXoff EQU $140 |
SerRcvBuf EQU $BFF000 ; 4kB serial recieve buffer |
|
asmbuf EQU $160 ; to $17F |
|
QNdx0 EQU $780 |
QNdx1 EQU QNdx0+2 |
QNdx2 EQU QNdx1+2 |
128,12 → 186,10
FreeMsg EQU nMailbox + 2 |
nMsgBlk EQU FreeMsg + 2 |
|
IrqSource EQU $79A |
|
IRQFlag EQU $7C6 |
|
CharOutVec EQU $800 |
CharInVec EQU $804 |
CmdPromptJI EQU $808 |
|
; Register save area for monitor |
mon_DSAVE EQU $900 |
147,7 → 203,7
|
mon_numwka EQU $910 |
mon_r1 EQU $920 |
mon_r2 EQU $922 |
mon_r2 EQU $924 |
|
; The ORG directive must set an address a multiple of 4 in order for the Verilog |
; output to work correctly. |
203,7 → 259,7
HomeCursorJmp |
lbra HomeCursor |
|
org $FFE000 |
org $FFD400 |
|
; Local RAM test routine |
; Checkerboard testing. |
217,7 → 273,7
ldd #$AAA555 |
ramtest1: |
std ,y++ |
cmpy #$C00000 |
cmpy #$8000 |
blo ramtest1 |
; now readback values and compare |
ldy #0 |
225,7 → 281,7
ldd ,y++ |
cmpd #$AAA555 |
bne ramerr |
cmpy #$C00000 |
cmpy #$8000 |
blo ramtest3 |
lda #2 |
sta LEDS |
241,7 → 297,7
sync |
jmp ,u |
|
org $FFF000 |
org $FFE000 |
FDB Monitor |
FDB DumRts ; NEXTCMD |
FDB INCH |
267,12 → 323,16
;------------------------------------------------------------------------------ |
|
start: |
lda #$FFF ; all cores can do this |
sta VIA+VIA_DDRA |
lda #$55 ; see if we can at least set LEDs |
sta LEDS |
lda #1 ; prime OS semaphore |
sta OSSEMA+$1000 |
ldu #st6 ; U = return address |
jmp ramtest ; JMP dont JSR |
st6: |
lds #$3FFF ; boot up stack area |
lds #$6FFF ; boot up stack area |
lda COREID |
cmpa #FIRST_CORE |
; beq st8 |
287,7 → 347,7
bsr Delay3s ; give some time for devices to reset |
lda #$AA |
sta LEDS |
lda #2 |
lda #FIRST_CORE |
sta IOFocusID ; core #2 has focus |
sta RunningID |
lda #$0CE |
296,8 → 356,10
bsr ClearScreen |
ldd #DisplayChar |
std CharOutVec |
ldd #DBGGetKey |
ldd #SerialPeekCharDirect |
std CharInVec |
ldb #24 ; request IO focus |
lbsr OSCall |
ldb COREID |
cmpb #FIRST_CORE |
beq init |
311,11 → 373,20
; initialize interrupt controller |
; first, zero out all the vectors |
init: |
lbsr rtc_read ; get clock values |
ldx #kbdHeadRcv |
ldb #32 ; number of bytes to zero out |
init1: |
clr ,x+ |
decb |
bne init1 |
lbsr TimerInit |
lbsr InitSerial |
ldx #128 |
lda #1 ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7) |
ldb #FIRST_CORE ; serving core id |
st1: |
clr PIC,x ; cause code |
clr PIC,x ; cause code |
sta PIC+1,x |
stb PIC+2,x |
leax 4,x |
324,7 → 395,12
; lda #4 ; make the timer interrupt edge sensitive |
; sta PIC+4 ; reg #4 is the edge sensitivity setting |
; sta PIC ; reg #0 is interrupt enable |
|
lda #$81 ; make irq edge sensitive |
sta PIC+$FD |
lda #31 ; enable timer interrupt |
; sta PIC+9 |
ldb #1 |
stb OUTSEMA+SEMAABS ; set semaphore to 1 available slot |
skip_init: |
andcc #$EF ; unmask irq |
lda #56 |
419,6 → 495,10
sync |
lbra Monitor |
|
;------------------------------------------------------------------------------ |
; Single core sieve. |
;------------------------------------------------------------------------------ |
|
sieve: |
lda #'P' ; indicate prime |
ldx #0 ; start at first char of screen |
441,8 → 521,7
cmpb #4080 |
blo sieve2 |
sieve4: ; hang machine |
sync |
lbra MonitorStart |
rts |
|
;------------------------------------------------------------------------------ |
; Three second delay for user convenience and to allow some devices time to |
476,12 → 555,22
rts |
|
;------------------------------------------------------------------------------ |
; Parameters: |
; b = core id of core to copy |
;------------------------------------------------------------------------------ |
; |
CopyVirtualScreenToScreen: |
pshs d,x,y,u |
bsr GetScreenLocation |
; Compute virtual screen location for core passed in accb. |
tfr b,a |
asla |
asla |
asla |
asla |
ora #$C00 |
clrb |
tfr d,x |
pshs d |
ldy #TEXTSCR |
ldu #56*29/2 |
cv2s1: |
491,11 → 580,13
cmpu #0 |
bne cv2s1 |
; reset the cursor position in the text controller |
ldb CursorRow |
puls x |
ldb CursorRow,x |
lda #56 |
mul |
tfr d,x |
ldb CursorCol |
tfr d,y |
ldb CursorCol,x |
tfr y,x |
abx |
stx TEXTREG+TEXT_CURPOS |
puls d,x,y,u,pc |
566,7 → 657,7
tfr u,x ; get back count |
cs2: |
sta ,y+ |
leax -1,x ; decrement x |
dex ; decrement x |
bne cs2 |
cs3: |
puls d,x,y,u,pc |
588,9 → 679,9
scrup1: |
ldd ,x++ ; move 2 characters |
std ,u++ |
leay -1,y |
dey |
bne scrup1 |
lda #30 |
lda #29 |
bsr BlankLine |
puls d,x,y,u,pc |
|
724,6 → 815,7
;------------------------------------------------------------------------------ |
; |
DisplayChar: |
lbsr SerialPutChar |
pshs d,x |
cmpb #CR ; carriage return ? |
bne dccr |
730,7 → 822,7
clr CursorCol ; just set cursor column to zero on a CR |
bsr UpdateCursorPos |
dcx14: |
puls d,x,pc |
lbra dcx4 |
dccr: |
cmpb #$91 ; cursor right ? |
bne dcx6 |
792,6 → 884,8
deca |
sta CursorCol |
bsr CalcScreenLoc |
tfr d,x |
lda CursorCol |
dcx5: |
ldb 1,x |
stb ,x++ |
799,9 → 893,9
cmpa #56 |
blo dcx5 |
ldb #' ' |
leax -1,x |
dex |
stb ,x |
puls d,x,dp,pc |
bra dcx4 |
dcx3: |
cmpb #LF ; linefeed ? |
beq dclf |
814,7 → 908,7
; lda CharColor |
; sta $2000,x |
bsr IncCursorPos |
puls d,x,pc |
bra dcx4 |
dclf: |
bsr IncCursorRow |
dcx4: |
864,12 → 958,16
DisplayString: |
pshs d,x |
tfr d,x |
dspj2: ; lock semaphore for access |
lda OUTSEMA+1 |
beq dspj2 |
dspj1B: |
ldb ,x+ ; move string char into acc |
beq dsretB ; is it end of string ? |
bsr OUTCH ; display character |
lbsr OUTCH ; display character |
bra dspj1B |
dsretB: |
clr OUTSEMA+1 ; unlock semaphore |
puls d,x,pc |
|
DisplayStringCRLF: |
876,9 → 974,9
pshs d |
bsr DisplayString |
ldb #CR |
bsr OUTCH |
lbsr OUTCH |
ldb #LF |
bsr OUTCH |
lbsr OUTCH |
puls d,pc |
|
; |
945,14 → 1043,22
cmpb #10 |
blo DispNyb1 |
addb #'A'-10 |
bsr OUTCH |
lbsr OUTCH |
puls b,pc |
DispNyb1 |
addb #'0' |
bsr OUTCH |
lbsr OUTCH |
puls b,pc |
|
;============================================================================== |
; Timer |
;============================================================================== |
|
OPT INCLUDE "d:\cores2022\rf6809\software\boot\timer.asm" |
OPT INCLUDE "d:\cores2022\rf6809\software\boot\i2c.asm" |
OPT INCLUDE "d:\cores2022\rf6809\software\boot\rtc_driver.asm" |
|
;============================================================================== |
; Keyboard I/O |
;============================================================================== |
|
987,6 → 1093,12
KeybdSeek: |
rts |
|
;============================================================================== |
; Serial I/O |
;============================================================================== |
|
OPT INCLUDE "d:\cores2022\rf6809\software\boot\serial.asm" |
|
;------------------------------------------------------------------------------ |
; Check if there is a keyboard character available. If so return true (<0) |
; otherwise return false (0) in accb. |
998,8 → 1110,25
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
INCH: |
ldd #-1 ; block if no key available |
bra DBGGetKey |
pshs b |
INCH2: |
ldb COREID |
cmpb IOFocusID ; if we do not have focus, block |
bne INCH2 |
; ldb #$800 ; block if no key available, get scancode directly |
; bra GetKey |
; jsr [CharInVec] ; vector is being overwritten somehow |
lbsr SerialPeekCharDirect |
tsta |
bmi INCH1 ; block if no key available |
leas 1,s ; get rid of blocking status |
rts |
INCH1: |
puls b ; check blocking status |
tstb |
bmi INCH ; if blocking, loop |
ldd #-1 ; return -1 if no char available |
rts |
|
INCHE: |
bsr INCH |
1015,7 → 1144,7
lbsr CRLF |
bra INCHEK1 |
INCHEK2: |
bsr DisplayChar |
lbsr DisplayChar |
INCHEK1: |
rts |
|
1042,30 → 1171,140
rts |
|
;============================================================================== |
; Femtiki Operating System. |
;============================================================================== |
|
OSCallTbl: |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw 0 |
fcw ReleaseIOFocus |
fcw 0 |
fcw RequestIOFocus |
|
OSCall: |
; wait for availability |
osc1: |
tst OSSEMA+1 |
beq osc1 |
aslb |
ldx #OSCallTbl |
abx |
tst ,x |
beq oscx |
jmp [,x] |
oscx: |
clr OSSEMA+1 |
rts |
|
RequestIOFocus: |
ldb COREID |
ldx #IOFocusList |
abx |
sta ,x |
tst IOFocusID |
lbne oscx |
stb IOFocusID |
lbra oscx |
|
ReleaseIOFocus: |
ldb COREID |
ldx #IOFocusList |
abx |
clr ,x ; clear the request indicator |
lbsr CopyScreenToVirtualScreen |
cmpb IOFocusID ; are we the one with the focus? |
lbne oscx |
; We had the focus, so now a new core needs the focus. |
; Search the focus list for a requestor. If no requester |
; is found, give focus to core #1. |
lda #15 |
riof2: |
incb |
andb #15 |
abx |
tst ,x |
bne riof1 |
deca |
bne riof2 |
; If no focus is requested by anyone, give to core #1 |
ldb #1 |
lda #24 |
sta ,x |
riof1: |
stb IOFocusID |
lbsr CopyVirtualScreenToScreen |
lbra oscx |
|
|
;============================================================================== |
; Disassembler |
;============================================================================== |
|
OPT include "d:\cores2022\rf6809\software\boot\disassem.asm" |
|
;============================================================================== |
; System Monitor |
;============================================================================== |
; |
|
CmdPrompt: |
lbsr CRLF |
ldb #'$' |
lbsr OUTCH |
lbra OUTCH |
|
msgF09Starting: |
fcb "Femtiki F09 Multi-core OS Starting",CR,LF,0 |
|
MonitorStart: |
ldd #msgF09Starting |
lbsr DisplayString |
ldd #HelpMsg |
bsr DisplayString |
lbsr DisplayString |
ldd #CmdPrompt |
std CmdPromptJI |
Monitor: |
leas $3FFF ; reset stack pointer |
leas $6FFF ; reset stack pointer |
clrb ; turn off keyboard echo |
bsr SetKeyboardEcho |
lbsr SetKeyboardEcho |
; Reset IO vectors |
ldd #SerialPeekCharDirect |
std CharInVec |
ldd #DisplayChar |
std CharOutVec |
ldd #CmdPrompt |
std CmdPromptJI |
; jsr RequestIOFocus |
PromptLn: |
lbsr CRLF |
ldb #'$' |
bsr OUTCH |
jsr [CmdPromptJI] |
|
; Get characters until a CR is keyed |
|
Prompt3: |
ldd #-1 ; block until key present |
bsr DBGGetKey |
lbsr INCH |
cmpb #CR |
beq Prompt1 |
bsr OUTCH |
lbsr OUTCH |
bra Prompt3 |
|
; Process the screen line that the CR was keyed on |
1073,36 → 1312,58
Prompt1: |
ldd #$5050 |
std LEDS |
ldb RunningID |
cmpb #61 |
bhi Prompt3 |
; ldb RunningID |
; cmpb #61 |
; bhi Prompt3 |
ldd #$5151 |
std LEDS |
clr CursorCol ; go back to the start of the line |
bsr CalcScreenLoc ; calc screen memory location |
lbsr CalcScreenLoc ; calc screen memory location |
tfr d,y |
ldd #$5252 |
std LEDS |
skipDollar: |
bsr MonGetNonSpace |
cmpb #'$' |
bne Prompt2 ; skip over '$' prompt character |
beq skipDollar ; skip over '$' prompt character |
lda #$5353 |
std LEDS |
bsr MonGetNonSpace |
|
; Dispatch based on command character |
; |
Prompt2: |
cmpb #'<' |
bne PromptHelp |
bsr MonGetch |
cmpb #'>' |
bne Monitor |
bsr MonGetch |
cmpb #'s' |
bne Prompt2a |
ldd #SerialPeekCharDirect |
std CharInVec |
ldd #SerialPutChar |
std CharOutVec |
bra Monitor |
Prompt2a: |
cmpb #'c' |
bne Monitor |
ldd #GetKey |
std CharInVec |
ldd #DisplayChar |
std CharOutVec |
bra Monitor |
PromptHelp: |
cmpb #'?' ; $? - display help |
bne PromptC |
ldd #HelpMsg |
bsr DisplayString |
lbsr DisplayString |
bra Monitor |
PromptC: |
cmpb #'C' |
bne PromptD |
lbsr ClearScreen |
bsr HomeCursor |
lbsr ClearScreen |
lbsr HomeCursor |
bra Monitor |
PromptD: |
cmpb #'D' |
1109,7 → 1370,7
bne PromptF |
bsr MonGetch |
cmpb #'R' |
bne Prompt3 |
bne DumpMemory |
bra DumpRegs |
PromptF: |
cmpb #'F' |
1126,13 → 1387,33
lbeq jump_to_code |
PromptR: |
cmpb #'R' |
bne Prompt_s |
ldu #Monitor |
lbra ramtest |
Prompt_s: |
cmpb #'s' |
bne PromptT |
lbsr SerialOutputTest |
bra Monitor |
PromptT: |
cmpb #'T' |
bne PromptU |
bsr MonGetch |
cmpb #'I' |
bne Monitor |
lbsr ramtest |
bsr MonGetch |
cmpb #'R' |
bne Monitor |
lbsr rtc_read |
bra Monitor |
PromptU: |
cmpb #'U' |
bne Monitor |
lbra disassem |
|
MonGetch: |
ldb ,y |
leay 1,y |
iny |
rts |
|
MonGetNonSpace: |
1139,8 → 1420,6
bsr MonGetCh |
cmpb #' ' |
beq MonGetNonSpace |
cmpb #9 ; tab |
beq MonGetNonSpace |
rts |
|
;------------------------------------------------------------------------------ |
1154,7 → 1433,7
bsr MonGetch |
cmpb #' ' |
beq ignBlanks1 |
leay -1,y |
dey |
rts |
|
;------------------------------------------------------------------------------ |
1195,18 → 1474,20
rts |
|
;------------------------------------------------------------------------------ |
; Get a hexidecimal number. Maximum of nine digits. |
; Y = text pointer (updated) |
; D = number of digits |
; mon_numwka contains number |
; Get a hexidecimal number. Maximum of twelve digits. |
; |
; Modifies: |
; Y = text pointer (updated) |
; D = number of digits |
; mon_numwka contains number |
;------------------------------------------------------------------------------ |
; |
GetHexNumber: |
clrd |
std mon_numwka |
std mon_numwka ; zero out work area |
std mon_numwka+2 |
pshs x |
ldx #0 ; max 9 eight digits |
ldx #0 ; max 12 eight digits |
gthxn2: |
bsr MonGetch |
bsr AsciiToHexNybble |
1220,7 → 1501,7
orb mon_numwka+3 |
stb mon_numwka+3 |
inx |
cmpx #9 |
cmpx #12 |
blo gthxn2 |
gthxn1: |
tfr x,d |
1256,24 → 1537,24
; |
AsciiToHexNybble: |
cmpb #'0' |
bcc gthx3 |
cmpb #'9'+1 |
bcs gthx5 |
blo gthx3 |
cmpb #'9' |
bhi gthx5 |
subb #'0' |
rts |
gthx5: |
cmpb #'A' |
bcc gthx3 |
cmpb #'F'+1 |
bcs gthx6 |
blo gthx3 |
cmpb #'F' |
bhi gthx6 |
subb #'A' |
addb #10 |
rts |
gthx6: |
cmpb #'a' |
bcc gthx3 |
cmpb #'z'+1 |
bcs gthx3 |
blo gthx3 |
cmpb #'z' |
bhi gthx3 |
subb #'a' |
addb #10 |
rts |
1315,7 → 1596,7
; db "L = Load sector",CR,LF |
; db "W = Write sector",CR,LF |
fcb "DR = Dump registers",CR,LF |
; db "D = Dump memory",CR,LF |
fcb "D = Dump memory",CR,LF |
; db "F = Fill memory",CR,LF |
; db "FL = Dump I/O Focus List",CR,LF |
fcb "FIG = start FIG Forth",CR,LF |
1327,15 → 1608,16
; db "R[n] = Set register value",CR,LF |
; db "r = random lines - test bitmap",CR,LF |
; db "e = ethernet test",CR,LF |
fcb "s = serial output test",CR,LF |
; db "T = Dump task list",CR,LF |
; db "TO = Dump timeout list",CR,LF |
; db "TI = display date/time",CR,LF |
fcb "TI = display date/time",CR,LF |
; db "TEMP = display temperature",CR,LF |
; db "P = Piano",CR,LF,0 |
fcb 0 |
|
msgRegHeadings |
fcb CR,LF," D/AB X Y U S PC DP CCR",CR,LF,0 |
fcb CR,LF," D/AB X Y U S PC DP CCR",CR,LF,0 |
|
nHEX4: |
jsr HEX4 |
1343,12 → 1625,81
|
nXBLANK: |
ldb #' ' |
bra OUTCH |
lbra OUTCH |
|
DumpRegs |
ldx #msgRegHeadings |
ldd #msgRegHeadings>>16 |
jsr DisplayStringDX |
;------------------------------------------------------------------------------ |
; Dump Memory |
; |
; Usage: |
; $D FFFC12 8 |
; |
; Dump formatted to look like: |
; :FFFC12 012 012 012 012 555 666 777 888 |
; |
;------------------------------------------------------------------------------ |
|
DumpMemory: |
bsr GetTwoParams |
ldy #0 |
ldy mon_r1+2 |
dmpm2: |
lbsr CRLF |
ldb #':' |
lbsr OUTCH |
tfr y,d |
;addd mon_r1+2 ; output the address |
lbsr DispWordAsHex |
ldb #' ' |
lbsr OUTCH |
ldx #8 ; number of bytes to display |
dmpm1: |
; ldb far [mon_r1+1],y |
;ldb [mon_r1+2],y |
ldb ,y |
iny |
lbsr DispByteAsHex ; display byte |
ldb #' ' ; followed by a space |
lbsr OUTCH |
clrb |
clra |
lbsr INCH |
cmpb #CTRLC |
beq dmpm3 |
dex |
bne dmpm1 |
; Now output ascii |
ldb #' ' |
lbsr OUTCH |
ldx #8 ; 8 chars to output |
leay -8,y ; backup pointer |
dmpm5: |
; ldb far [mon_r1+1],y ; get the char |
; ldb [mon_r1+2],y ; get the char |
ldb ,y |
cmpb #$20 ; is it a control char? |
bhs dmpm4 |
ldb #'.' |
dmpm4: |
lbsr OUTCH |
iny |
dex |
bne dmpm5 |
cmpy mon_r2+2 |
blo dmpm2 |
dmpm3: |
lbsr CRLF |
lbra Monitor |
|
;------------------------------------------------------------------------------ |
; Dump Registers |
; |
; Usage: |
; $DR |
;------------------------------------------------------------------------------ |
|
DumpRegs: |
ldd #msgRegHeadings |
lbsr DisplayString |
bsr nXBLANK |
ldd mon_DSAVE |
bsr nHEX4 |
1365,8 → 1716,8
ldd mon_SSAVE |
bsr nHEX4 |
bsr nXBLANK |
ldd mon_PCSAVE |
bsr nHEX4 |
ldb mon_PCSAVE+1 |
lbsr DispByteAsHex |
ldd mon_PCSAVE+2 |
bsr nHEX4 |
bsr nXBLANK |
1374,11 → 1725,19
jsr HEX2 |
bsr nXBLANK |
lda mon_CCRSAVE |
jsr HEX2 |
lbsr HEX2 |
bsr nXBLANK |
jmp Monitor |
lbra Monitor |
|
;------------------------------------------------------------------------------ |
; Jump to code |
; |
; Registers are loaded with values from the monitor register save area before |
; the code is jumped to. |
; |
; J <address> |
;------------------------------------------------------------------------------ |
|
jump_to_code: |
bsr GetHexNumber |
sei |
1385,12 → 1744,12
lds mon_SSAVE |
ldd #<jtc_exit |
pshs d |
ldd #>jtc_exit |
ldb #>jtc_exit |
pshs b |
ldd mon_numwka+2 |
pshs d |
ldd mon_numwka |
pshs d |
ldb mon_numwka+1 |
pshs b |
ldd mon_USAVE |
pshs d |
ldd mon_YSAVE |
1405,19 → 1764,28
pshs a |
puls far ccr,d,dpr,x,y,u,pc |
jtc_exit: |
pshs ccr |
std mon_DSAVE |
sts >mon_SSAVE ; need to use extended addressing, no direct page setting |
leas $6FFF ; reset stack to system area, dont modify flags register! |
pshs ccr ; now the stack can be used |
pshs a ; save acca register so we can use it |
tfr dpr,a ; a = outgoing dpr value |
sta >mon_DPRSAVE ; force extended addressing mode usage here dpr is not set |
clra ; dpg register must be set to zero before values are |
tfr a,dpr ; saved in the monitor register save area. |
puls a ; get back acca |
std mon_DSAVE ; save regsters, can use direct addressing now |
stx mon_XSAVE |
sty mon_YSAVE |
stu mon_USAVE |
tfr dpr,a |
sta mon_DPRSAVE |
puls a |
sta mon_CCRSAVE |
sts mon_SSAVE |
lds #$3FFF |
puls a ; get back ccr |
sta mon_CCRSAVE ; and save it too |
; Reset vectors in case they got toasted. |
ldd #SerialPeekCharDirect |
std CharInVec |
ldd #DisplayChar |
std CharOutVec |
; todo set according to coreid |
jmp DumpRegs |
lbra DumpRegs ; now go do a register dump |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
1432,10 → 1800,10
stu mon_USAVE |
tfr dpr,a |
sta mon_DPRSAVE |
puls a |
sta mon_PCSAVE |
puls D |
std mon_PCSAVE |
puls D |
std mon_PCSAVE+2 |
std mon_PCSAVE+1 |
sts mon_SSAVE |
lds #$3FFF |
cli |
1443,10 → 1811,10
swi3_exit: |
sei |
lds mon_SSAVE |
ldd mon_PCSAVE+2 |
ldd mon_PCSAVE+1 |
pshs d |
ldd mon_PCSAVE |
pshs d |
lda mon_PCSAVE |
pshs a |
ldu mon_USAVE |
ldy mon_YSAVE |
ldx mon_XSAVE |
1463,12 → 1831,26
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
firq_rout: |
rti |
|
irq_rout: |
; lbsr SerialIRQ ; check for recieved character |
; lbsr TimerIRQ |
|
; Reset the edge sense circuit in the PIC |
lda #2 ; Timer is IRQ #2 |
sta PIC+6 ; register 6 is edge sense reset reg |
lda #31 ; Timer is IRQ #31 |
sta IrqSource ; stuff a byte indicating the IRQ source for PEEK() |
sta PIC+16 ; register 16 is edge sense reset reg |
lda VIA+VIA_IFR |
bpl notTimerIRQ2 |
bita #$800 |
beq notTimerIRQ2 |
clr VIA+VIA_T3LL |
clr VIA+VIA_T3LH |
inc $E00037 ; update timer IRQ screen flag |
notTimerIRQ2: |
|
sta IrqSource ; stuff a byte indicating the IRQ source for PEEK() |
lda IrqBase ; get the IRQ flag byte |
lsra |
ora IrqBase |
1475,34 → 1857,34
anda #$E0 |
sta IrqBase |
|
inc TEXTSCR+110 ; update IRQ live indicator on screen |
; inc TEXTSCR+54 ; update IRQ live indicator on screen |
|
; flash the cursor |
; only bother to flash the cursor for the task with the IO focus. |
lda COREID |
cmpa IOFocusID |
bne tr1a |
lda CursorFlash ; test if we want a flashing cursor |
beq tr1a |
lbsr CalcScreenLoc ; compute cursor location in memory |
tfr d,y |
lda $2000,y ; get color code $2000 higher in memory |
ldb IRQFlag ; get counter |
lsrb |
lsra |
lsra |
lsra |
lsra |
lsrb |
rola |
lsrb |
rola |
lsrb |
rola |
lsrb |
rola |
sta $E00000,y ; store the color code back to memory |
tr1a |
; lda COREID |
; cmpa IOFocusID |
; bne tr1a |
; lda CursorFlash ; test if we want a flashing cursor |
; beq tr1a |
; lbsr CalcScreenLoc ; compute cursor location in memory |
; tfr d,y |
; lda $2000,y ; get color code $2000 higher in memory |
; ldb IRQFlag ; get counter |
; lsrb |
; lsra |
; lsra |
; lsra |
; lsra |
; lsrb |
; rola |
; lsrb |
; rola |
; lsrb |
; rola |
; lsrb |
; rola |
; sta $E00000,y ; store the color code back to memory |
tr1a: |
rti |
|
;------------------------------------------------------------------------------ |
1511,17 → 1893,21
ldb COREID |
lda #'I' |
ldx #TEXTSCR+40 |
abx |
sta ,x |
sta b,x |
rti_insn: |
rti |
|
; Special Register Area |
org $FFFFE0 |
|
; Interrupt vector table |
|
org $FFFFF0 |
nop |
nop |
fcw swi3_rout |
|
org $FFFFF8 |
fcw irq_rout |
fcw rti_insn ; reserved |
fcw swi3_rout ; SWI3 |
fcw rti_insn ; SWI2 |
fcw firq_rout ; FIRQ |
fcw irq_rout ; IRQ |
fcw start ; SWI |
fcw nmi_rout ; NMI |
fcw start ; RST |
/trunk/software/boot/boot_rom.lst
1,25 → 1,38
0 error(s), 62 warning(s) unlisted in pass 1 |
0 error(s), 1406 warning(s) unlisted in pass 1 |
; ============================================================================ |
; __ |
; \\__/ o\ (C) 2013-2022 Robert Finch, Stratford |
; \\__/ o\ (C) 2013-2022 Robert Finch, Waterloo |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; This source file is free software: you can redistribute it and/or modify |
; it under the terms of the GNU Lesser General Public License as published |
; by the Free Software Foundation, either version 3 of the License, or |
; (at your option) any later version. |
; BSD 3-Clause License |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; |
; 1. Redistributions of source code must retain the above copyright notice, this |
; list of conditions and the following disclaimer. |
; |
; 2. Redistributions in binary form must reproduce the above copyright notice, |
; this list of conditions and the following disclaimer in the documentation |
; and/or other materials provided with the distribution. |
; |
; 3. Neither the name of the copyright holder nor the names of its |
; contributors may be used to endorse or promote products derived from |
; this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
; |
; This source file is distributed in the hope that it will be useful, |
; but WITHOUT ANY WARRANTY; without even the implied warranty of |
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
; GNU General Public License for more details. |
; |
; You should have received a copy of the GNU General Public License |
; along with this program. If not, see <http://www.gnu.org/licenses/>. |
; |
; ============================================================================ |
; |
CR EQU $0D ;ASCII equates |
32,6 → 45,7
CTRLK EQU $0B |
CTRLM EQU $0D |
CTRLS EQU $13 |
CTRLT EQU $14 |
CTRLX EQU $18 |
XON EQU $11 |
XOFF EQU $13 |
82,12 → 96,32
|
COREID EQU $FFFFFFFE0 |
MSCOUNT EQU $FFFFFFFE4 |
LEDS EQU $FFFE60000 |
LEDS EQU $FFFE60001 |
VIA EQU $FFFE60000 |
VIA_PA EQU 1 |
VIA_DDRA EQU 3 |
VIA_ACR EQU 11 |
VIA_IFR EQU 13 |
VIA_IER EQU 14 |
VIA_T3LL EQU 18 |
VIA_T3LH EQU 19 |
VIA_T3CMPL EQU 20 |
VIA_T3CMPH EQU 21 |
TEXTSCR EQU $FFFE00000 |
TEXTREG EQU $FFFE0DF00 |
TEXT_COLS EQU 0 |
TEXT_ROWS EQU 1 |
TEXT_CURPOS EQU 34 |
ACIA EQU $FFFE30100 |
ACIA_TX EQU 0 |
ACIA_RX EQU 0 |
ACIA_STAT EQU 1 |
ACIA_CMD EQU 2 |
ACIA_CTRL EQU 3 |
ACIA_CTRL2 EQU 11 |
RTC EQU $FFFE30500 ; I2C |
RTCBuf EQU $7FC0 |
|
KEYBD EQU $FFFE30400 |
KEYBDCLR EQU $FFFE30402 |
PIC EQU $FFFE3F000 |
94,18 → 128,26
SPRITE_CTRL EQU $FFFE10000 |
SPRITE_EN EQU $3C0 |
|
OUTSEMA EQU $EF0000 |
SEMAABS EQU $1000 |
OSSEMA EQU $EF0010 |
|
BIOS_SCREENS EQU $17000000 ; $17000000 to $171FFFFF |
|
; EhBASIC vars: |
; |
NmiBase EQU $DC |
IrqBase EQU $DF |
NmiBase EQU $FF0013 |
IrqBase EQU $FF0014 |
|
; The IO focus list is a doubly linked list formed into a ring. |
; |
IOFocusNdx EQU $100 |
IOFocusID EQU $100 |
|
; These variables in global OS storage area |
|
IOFocusList EQU $FF0000 ; to $FF000F |
IOFocusID EQU $FF0010 |
IrqSource EQU $FF0011 |
IRQFlag EQU $FF0012 |
|
; These variables use direct page access |
CursorRow EQU $110 |
CursorCol EQU $111 |
116,7 → 158,23
KeyState2 EQU $121 |
KeyLED EQU $122 |
KeybdID EQU $124 |
KeybdBlock EQU $126 |
kbdHeadRcv EQU $127 |
kbdTailRcv EQU $128 |
kbdFifo EQU $40 ; in local RAM |
kbdFifoAlias EQU $C00040 ; to $C0007F ; alias for $40 to $7F |
SerhZero EQU $130 |
SerHeadRcv EQU $131 |
SertZero EQU $132 |
SerTailRcv EQU $133 |
SerHeadXmit EQU $136 |
SerTailXmit EQU $138 |
SerRcvXon EQU $139 |
SerRcvXoff EQU $140 |
SerRcvBuf EQU $BFF000 ; 4kB serial recieve buffer |
|
asmbuf EQU $160 ; to $17F |
|
QNdx0 EQU $780 |
QNdx1 EQU QNdx0+2 |
QNdx2 EQU QNdx1+2 |
129,12 → 187,10
FreeMsg EQU nMailbox + 2 |
nMsgBlk EQU FreeMsg + 2 |
|
IrqSource EQU $79A |
|
IRQFlag EQU $7C6 |
|
CharOutVec EQU $800 |
CharInVec EQU $804 |
CmdPromptJI EQU $808 |
|
; Register save area for monitor |
mon_DSAVE EQU $900 |
148,7 → 204,7
|
mon_numwka EQU $910 |
mon_r1 EQU $920 |
mon_r2 EQU $922 |
mon_r2 EQU $924 |
|
; The ORG directive must set an address a multiple of 4 in order for the Verilog |
; output to work correctly. |
159,7 → 215,7
00FFD0AE 012 nop |
XBLANK |
00FFD0AF 0C6020 ldb #' ' |
00FFD0B1 0170028C8 lbsr OUTCH |
00FFD0B1 017001C5E lbsr OUTCH |
00FFD0B4 039 rts |
|
org $FFD0D0 |
168,9 → 224,9
CRLF |
CRLF1: |
00FFD0D2 0C600D ldb #CR |
00FFD0D4 0170028A5 lbsr OUTCH |
00FFD0D4 017001C3B lbsr OUTCH |
00FFD0D7 0C600A ldb #LF |
00FFD0D9 0170028A0 lbsr OUTCH |
00FFD0D9 017001C36 lbsr OUTCH |
00FFD0DC 039 rts |
|
org $FFD0F0 |
184,7 → 240,7
org $FFD2C0 |
00FFD2C0 012 nop |
LETTER |
00FFD2C1 0170026B8 lbsr OUTCH |
00FFD2C1 017001A4E lbsr OUTCH |
00FFD2C4 039 rts |
|
org $FFD2CC |
191,20 → 247,20
00FFD2CC 012 nop |
00FFD2CD 012 nop |
HEX2 |
00FFD2CE 0170020CC lbsr DispByteAsHex |
00FFD2CE 017001125 lbsr DispByteAsHex |
00FFD2D1 039 rts |
HEX4 |
00FFD2D2 0170020BF lbsr DispWordAsHex |
00FFD2D2 017001118 lbsr DispWordAsHex |
00FFD2D5 039 rts |
|
org $FFD300 |
ClearScreenJmp |
00FFD300 016001ECD lbra ClearScreen |
00FFD300 016000F0E lbra ClearScreen |
org $FFD308 |
HomeCursorJmp |
00FFD308 016001F36 lbra HomeCursor |
00FFD308 016000F79 lbra HomeCursor |
|
org $FFE000 |
org $FFD400 |
|
; Local RAM test routine |
; Checkerboard testing. |
212,70 → 268,74
; Does not use any RAM including no stack |
|
ramtest: |
00FFE000 18E000000 ldy #0 |
00FFE003 086001 lda #1 |
00FFE005 0150B7FFFE60000 sta LEDS |
00FFE00A 0CCAAA555 ldd #$AAA555 |
00FFD400 18E000000 ldy #0 |
00FFD403 086001 lda #1 |
00FFD405 0150B7FFFE60001 sta LEDS |
00FFD40A 0CCAAA555 ldd #$AAA555 |
ramtest1: |
00FFE00D 0EDA01 std ,y++ |
00FFE00F 18CC00000 cmpy #$C00000 |
00FFE012 025FF9 blo ramtest1 |
00FFD40D 0EDA01 std ,y++ |
00FFD40F 18C008000 cmpy #$8000 |
00FFD412 025FF9 blo ramtest1 |
; now readback values and compare |
00FFE014 18E000000 ldy #0 |
00FFD414 18E000000 ldy #0 |
ramtest3: |
00FFE017 0ECA01 ldd ,y++ |
00FFE019 183AAA555 cmpd #$AAA555 |
00FFE01C 02600E bne ramerr |
00FFE01E 18CC00000 cmpy #$C00000 |
00FFE021 025FF4 blo ramtest3 |
00FFE023 086002 lda #2 |
00FFE025 0150B7FFFE60000 sta LEDS |
00FFE02A 06EC04 jmp ,u |
00FFD417 0ECA01 ldd ,y++ |
00FFD419 183AAA555 cmpd #$AAA555 |
00FFD41C 02600E bne ramerr |
00FFD41E 18C008000 cmpy #$8000 |
00FFD421 025FF4 blo ramtest3 |
00FFD423 086002 lda #2 |
00FFD425 0150B7FFFE60001 sta LEDS |
00FFD42A 06EC04 jmp ,u |
ramerr: |
00FFE02C 086080 lda #$80 |
00FFE02E 0150B7FFFE60000 sta LEDS |
00FFE033 08EE00000 ldx #TEXTSCR |
00FFE036 0150F6FFFFFFFE0 ldb COREID |
00FFE03B 03A abx |
00FFE03C 086046 lda #'F' |
00FFE03E 0A7804 sta ,x |
00FFE040 013 sync |
00FFE041 06EC04 jmp ,u |
00FFD42C 086080 lda #$80 |
00FFD42E 0150B7FFFE60001 sta LEDS |
00FFD433 08EE00000 ldx #TEXTSCR |
00FFD436 0150F6FFFFFFFE0 ldb COREID |
00FFD43B 03A abx |
00FFD43C 086046 lda #'F' |
00FFD43E 0A7804 sta ,x |
00FFD440 013 sync |
00FFD441 06EC04 jmp ,u |
|
org $FFF000 |
00FFF000 FFF996 FDB Monitor |
00FFF002 FFF022 FDB DumRts ; NEXTCMD |
00FFF004 FFF95E FDB INCH |
00FFF006 FFF963 FDB INCHE |
00FFF008 FFF967 FDB INCHEK |
00FFF00A FFF97C FDB OUTCH |
00FFF00C FFF381 FDB PDATA |
00FFF00E FFF374 FDB PCRLF |
00FFF010 FFF370 FDB PSTRNG |
00FFF012 FFF022 FDB DumRts ; LRA |
00FFF014 FFF022 FDB DumRts |
00FFF016 FFF022 FDB DumRts |
00FFF018 FFF022 FDB DumRts |
00FFF01A FFF022 FDB DumRts ; VINIZ |
00FFF01C FFF29B FDB DisplayChar ; VOUTCH |
00FFF01E FFF022 FDB DumRts ; ACINIZ |
00FFF020 FFF022 FDB DumRts ; AOUTCH |
org $FFE000 |
00FFE000 FFF8AC FDB Monitor |
00FFE002 FFE022 FDB DumRts ; NEXTCMD |
00FFE004 FFECDA FDB INCH |
00FFE006 FFECF8 FDB INCHE |
00FFE008 FFECFC FDB INCHEK |
00FFE00A FFED12 FDB OUTCH |
00FFE00C FFE3DA FDB PDATA |
00FFE00E FFE3CD FDB PCRLF |
00FFE010 FFE3C9 FDB PSTRNG |
00FFE012 FFE022 FDB DumRts ; LRA |
00FFE014 FFE022 FDB DumRts |
00FFE016 FFE022 FDB DumRts |
00FFE018 FFE022 FDB DumRts |
00FFE01A FFE022 FDB DumRts ; VINIZ |
00FFE01C FFE2E1 FDB DisplayChar ; VOUTCH |
00FFE01E FFE022 FDB DumRts ; ACINIZ |
00FFE020 FFE022 FDB DumRts ; AOUTCH |
|
DumRts: |
00FFF022 039 rts |
00FFE022 039 rts |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
|
start: |
00FFF023 086055 lda #$55 ; see if we can at least set LEDs |
00FFF025 0150B7FFFE60000 sta LEDS |
00FFF02A 0CEFFF030 ldu #st6 ; U = return address |
00FFF02D 07EFFE000 jmp ramtest ; JMP dont JSR |
00FFE023 086FFF lda #$FFF ; all cores can do this |
00FFE025 0150B7FFFE60003 sta VIA+VIA_DDRA |
00FFE02A 086055 lda #$55 ; see if we can at least set LEDs |
00FFE02C 0150B7FFFE60001 sta LEDS |
00FFE031 086001 lda #1 ; prime OS semaphore |
00FFE033 0B7EF1010 sta OSSEMA+$1000 |
00FFE036 0CEFFE03C ldu #st6 ; U = return address |
00FFE039 07EFFD400 jmp ramtest ; JMP dont JSR |
st6: |
00FFF030 1CE003FFF lds #$3FFF ; boot up stack area |
00FFF033 0150B6FFFFFFFE0 lda COREID |
00FFF038 081001 cmpa #FIRST_CORE |
00FFE03C 1CE006FFF lds #$6FFF ; boot up stack area |
00FFE03F 0150B6FFFFFFFE0 lda COREID |
00FFE044 081001 cmpa #FIRST_CORE |
; beq st8 |
; sync ; halt cores other than 2 |
st8: |
285,73 → 345,89
; tfr d,x |
; jmp ,x ; jump to the BIOS now in local RAM |
st7: |
00FFF03A 08D11F bsr Delay3s ; give some time for devices to reset |
00FFF03C 0860AA lda #$AA |
00FFF03E 0150B7FFFE60000 sta LEDS |
00FFF043 086002 lda #2 |
00FFF045 097100 sta IOFocusID ; core #2 has focus |
00FFF047 0B7800000 sta RunningID |
00FFF04A 0860CE lda #$0CE |
00FFF04C 097113 sta ScreenColor |
00FFF04E 097112 sta CharColor |
00FFF050 08D17E bsr ClearScreen |
00FFF052 0CCFFF29B ldd #DisplayChar |
00FFF055 0DD800 std CharOutVec |
00FFF057 0CCFFF83B ldd #DBGGetKey |
00FFF05A 0DD804 std CharInVec |
00FFF05C 0150F6FFFFFFFE0 ldb COREID |
00FFF061 0C1001 cmpb #FIRST_CORE |
00FFF063 02700D beq init |
00FFF065 020025 bra skip_init |
00FFF067 02008D bra multi_sieve |
00FFE046 08D145 bsr Delay3s ; give some time for devices to reset |
00FFE048 0860AA lda #$AA |
00FFE04A 0150B7FFFE60001 sta LEDS |
00FFE04F 086001 lda #FIRST_CORE |
00FFE051 0B7FF0010 sta IOFocusID ; core #2 has focus |
00FFE054 0B7800000 sta RunningID |
00FFE057 0860CE lda #$0CE |
00FFE059 097113 sta ScreenColor |
00FFE05B 097112 sta CharColor |
00FFE05D 08D1B2 bsr ClearScreen |
00FFE05F 0CCFFE2E1 ldd #DisplayChar |
00FFE062 0FD000800 std CharOutVec |
00FFE065 0CCFFEBE4 ldd #SerialPeekCharDirect |
00FFE068 0FD000804 std CharInVec |
00FFE06B 0C6018 ldb #24 ; request IO focus |
00FFE06D 017000CE9 lbsr OSCall |
00FFE070 0150F6FFFFFFFE0 ldb COREID |
00FFE075 0C1001 cmpb #FIRST_CORE |
00FFE077 02700D beq init |
00FFE079 020046 bra skip_init |
00FFE07B 0200AE bra multi_sieve |
st3: |
00FFF069 0860FF lda #$FF |
00FFF06B 0150B7FFFE60000 sta LEDS |
00FFF070 020FF7 bra st3 |
00FFE07D 0860FF lda #$FF |
00FFE07F 0150B7FFFE60001 sta LEDS |
00FFE084 020FF7 bra st3 |
|
; initialize interrupt controller |
; first, zero out all the vectors |
init: |
00FFF072 08E000080 ldx #128 |
00FFF075 086001 lda #1 ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7) |
00FFF077 0C6001 ldb #FIRST_CORE ; serving core id |
00FFE086 01700042A lbsr rtc_read ; get clock values |
00FFE089 08E000127 ldx #kbdHeadRcv |
00FFE08C 0C6020 ldb #32 ; number of bytes to zero out |
init1: |
00FFE08E 06F800 clr ,x+ |
00FFE090 05A decb |
00FFE091 026FFB bne init1 |
00FFE093 01700038E lbsr TimerInit |
00FFE096 017000AD6 lbsr InitSerial |
00FFE099 08E000080 ldx #128 |
00FFE09C 086001 lda #1 ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7) |
00FFE09E 0C6001 ldb #FIRST_CORE ; serving core id |
st1: |
00FFF079 06F809E3F000 clr PIC,x ; cause code |
00FFF07D 0A7809E3F001 sta PIC+1,x |
00FFF081 0E7809E3F002 stb PIC+2,x |
00FFF085 030004 leax 4,x |
00FFF087 08C000100 cmpx #256 |
00FFF08A 025FED blo st1 |
00FFE0A0 06F809E3F000 clr PIC,x ; cause code |
00FFE0A4 0A7809E3F001 sta PIC+1,x |
00FFE0A8 0E7809E3F002 stb PIC+2,x |
00FFE0AC 030004 leax 4,x |
00FFE0AE 08C000100 cmpx #256 |
00FFE0B1 025FED blo st1 |
; lda #4 ; make the timer interrupt edge sensitive |
; sta PIC+4 ; reg #4 is the edge sensitivity setting |
; sta PIC ; reg #0 is interrupt enable |
|
00FFE0B3 086081 lda #$81 ; make irq edge sensitive |
00FFE0B5 0150B7FFFE3F0FD sta PIC+$FD |
00FFE0BA 08601F lda #31 ; enable timer interrupt |
; sta PIC+9 |
00FFE0BC 0C6001 ldb #1 |
00FFE0BE 0F7EF1000 stb OUTSEMA+SEMAABS ; set semaphore to 1 available slot |
skip_init: |
00FFF08C 01C0EF andcc #$EF ; unmask irq |
00FFF08E 086038 lda #56 |
00FFF090 0150B7FFFE0DF00 sta TEXTREG+TEXT_COLS |
00FFF095 08601D lda #29 |
00FFF097 0150B7FFFE0DF01 sta TEXTREG+TEXT_ROWS |
00FFF09C 08D132 bsr ClearScreen |
00FFF09E 08D1A1 bsr HomeCursor |
00FFF0A0 086005 lda #5 |
00FFF0A2 0150B7FFFE60000 sta LEDS |
00FFF0A7 0CCFFF0BF ldd #msgStartup |
00FFF0AA 08D2A8 bsr DisplayString |
00FFF0AC 08E000000 ldx #0 |
00FFF0AF 0CC000000 ldd #0 |
00FFF0B2 0170008D1 lbsr ShowSprites |
00FFF0B5 017000708 lbsr KeybdInit |
00FFF0B8 0DC124 ldd KeybdID |
00FFF0BA 08D2D8 bsr DispWordAsHex |
00FFF0BC 07EFFF991 jmp MonitorStart |
00FFE0C1 01C0EF andcc #$EF ; unmask irq |
00FFE0C3 086038 lda #56 |
00FFE0C5 0150B7FFFE0DF00 sta TEXTREG+TEXT_COLS |
00FFE0CA 08601D lda #29 |
00FFE0CC 0150B7FFFE0DF01 sta TEXTREG+TEXT_ROWS |
00FFE0D1 08D13E bsr ClearScreen |
00FFE0D3 08D1AF bsr HomeCursor |
00FFE0D5 086005 lda #5 |
00FFE0D7 0150B7FFFE60001 sta LEDS |
00FFE0DC 0CCFFE0F4 ldd #msgStartup |
00FFE0DF 08D2C1 bsr DisplayString |
00FFE0E1 08E000000 ldx #0 |
00FFE0E4 0CC000000 ldd #0 |
00FFE0E7 017000C32 lbsr ShowSprites |
00FFE0EA 017000853 lbsr KeybdInit |
00FFE0ED 0DC124 ldd KeybdID |
00FFE0EF 08D2FC bsr DispWordAsHex |
00FFE0F1 07EFFF89A jmp MonitorStart |
|
msgStartup |
00FFF0BF 072066036038030039020 fcb "rf6809 12-bit System Starting.",CR,LF,0 |
00FFF0C6 03103202D062069074020 |
00FFF0CD 05307907307406506D020 |
00FFF0D4 05307406107207406906E |
00FFF0DB 06702E00D00A000 |
00FFE0F4 072066036038030039020 fcb "rf6809 12-bit System Starting.",CR,LF,0 |
00FFE0FB 03103202D062069074020 |
00FFE102 05307907307406506D020 |
00FFE109 05307406107207406906E |
00FFE110 06702E00D00A000 |
|
;------------------------------------------------------------------------------ |
; The checkpoint register must be cleared within 1 second or a NMI interrupt |
363,8 → 439,8
;------------------------------------------------------------------------------ |
|
checkpoint: |
00FFF0E0 01507FFFFFFFFE1 clr $FFFFFFFE1 ; writing any value will do |
00FFF0E5 039 rts |
00FFE115 01507FFFFFFFFE1 clr $FFFFFFFE1 ; writing any value will do |
00FFE11A 039 rts |
|
;------------------------------------------------------------------------------ |
; Copy the system ROM to local RAM |
377,14 → 453,14
;------------------------------------------------------------------------------ |
|
romToRam: |
00FFF0E6 08EFFC000 ldx #$FFC000 |
00FFF0E9 18E00C000 ldy #$00C000 |
00FFE11B 08EFFC000 ldx #$FFC000 |
00FFE11E 18E00C000 ldy #$00C000 |
romToRam1: |
00FFF0EC 0EC801 ldd ,x++ |
00FFF0EE 0EDA01 std ,y++ |
00FFF0F0 08C000000 cmpx #0 |
00FFF0F3 026FF7 bne romToRam1 |
00FFF0F5 039 rts |
00FFE121 0EC801 ldd ,x++ |
00FFE123 0EDA01 std ,y++ |
00FFE125 08C000000 cmpx #0 |
00FFE128 026FF7 bne romToRam1 |
00FFE12A 039 rts |
|
;------------------------------------------------------------------------------ |
; Multi-core sieve program. |
395,61 → 471,64
; core number minus two. |
; |
multi_sieve: |
00FFF0F6 086050 lda #'P' ; indicate prime |
00FFF0F8 0150F6FFFFFFFE0 ldb COREID ; find out which core we are |
00FFF0FD 0C0001 subb #FIRST_CORE |
00FFF0FF 08E000000 ldx #0 ; start at first char of screen |
00FFF102 03A abx |
00FFE12B 086050 lda #'P' ; indicate prime |
00FFE12D 0150F6FFFFFFFE0 ldb COREID ; find out which core we are |
00FFE132 0C0001 subb #FIRST_CORE |
00FFE134 08E000000 ldx #0 ; start at first char of screen |
00FFE137 03A abx |
multi_sieve3: |
00FFF103 0A7809E00000 sta TEXTSCR,x ; store 'P' |
00FFF107 030008 leax 8,x ; advance to next position |
00FFF109 08C000FFF cmpx #4095 |
00FFF10C 025FF5 blo multi_sieve3 |
00FFF10E 0BDFFF0E0 jsr checkpoint |
00FFE138 0A7809E00000 sta TEXTSCR,x ; store 'P' |
00FFE13C 030008 leax 8,x ; advance to next position |
00FFE13E 08C000FFF cmpx #4095 |
00FFE141 025FF5 blo multi_sieve3 |
00FFE143 0BDFFE115 jsr checkpoint |
*** warning 1: Long branch within short branch range could be optimized |
00FFF111 0CB002 addb #2 ; start sieve at 2 (core id) |
00FFF113 08604E lda #'N' ; flag position value of 'N' for non-prime |
00FFE146 0CB002 addb #2 ; start sieve at 2 (core id) |
00FFE148 08604E lda #'N' ; flag position value of 'N' for non-prime |
multi_sieve2: |
00FFF115 08E000000 ldx #0 |
00FFF118 03A abx ; skip the first position - might be prime |
00FFE14A 08E000000 ldx #0 |
00FFE14D 03A abx ; skip the first position - might be prime |
multi_sieve1: |
00FFF119 03A abx ; increment |
00FFF11A 0A7809E00000 sta TEXTSCR,x |
00FFF11E 08C000FFF cmpx #4095 |
00FFF121 025FF6 blo multi_sieve1 |
00FFF123 0BDFFF0E0 jsr checkpoint |
00FFE14E 03A abx ; increment |
00FFE14F 0A7809E00000 sta TEXTSCR,x |
00FFE153 08C000FFF cmpx #4095 |
00FFE156 025FF6 blo multi_sieve1 |
00FFE158 0BDFFE115 jsr checkpoint |
*** warning 1: Long branch within short branch range could be optimized |
00FFF126 0CB008 addb #8 ; number of cores working on it |
00FFF128 0C1FF0 cmpb #4080 |
00FFF12A 025FE9 blo multi_sieve2 |
00FFE15B 0CB008 addb #8 ; number of cores working on it |
00FFE15D 0C1FF0 cmpb #4080 |
00FFE15F 025FE9 blo multi_sieve2 |
multi_sieve4: ; hang machine |
00FFF12C 013 sync |
00FFF12D 016000866 lbra Monitor |
00FFE161 013 sync |
00FFE162 016001747 lbra Monitor |
|
;------------------------------------------------------------------------------ |
; Single core sieve. |
;------------------------------------------------------------------------------ |
|
sieve: |
00FFF130 086050 lda #'P' ; indicate prime |
00FFF132 08E000000 ldx #0 ; start at first char of screen |
00FFE165 086050 lda #'P' ; indicate prime |
00FFE167 08E000000 ldx #0 ; start at first char of screen |
sieve3: |
00FFF135 0A7809E00000 sta TEXTSCR,x ; store 'P' |
00FFF139 030001 inx ; advance to next position |
00FFF13B 08C000FFF cmpx #4095 |
00FFF13E 025FF5 blo sieve3 |
00FFF140 0C6002 ldb #2 ; start sieve at 2 |
00FFF142 08604E lda #'N' ; flag position value of 'N' for non-prime |
00FFE16A 0A7809E00000 sta TEXTSCR,x ; store 'P' |
00FFE16E 030001 inx ; advance to next position |
00FFE170 08C000FFF cmpx #4095 |
00FFE173 025FF5 blo sieve3 |
00FFE175 0C6002 ldb #2 ; start sieve at 2 |
00FFE177 08604E lda #'N' ; flag position value of 'N' for non-prime |
sieve2: |
00FFF144 08E000000 ldx #0 |
00FFF147 03A abx ; skip the first position - might be prime |
00FFE179 08E000000 ldx #0 |
00FFE17C 03A abx ; skip the first position - might be prime |
sieve1: |
00FFF148 03A abx ; increment |
00FFF149 0A7809E00000 sta TEXTSCR,x |
00FFF14D 08C000FFF cmpx #4095 |
00FFF150 025FC7 blo multi_sieve1 |
00FFF152 05C incb ; number of cores working on it |
00FFF153 0C1FF0 cmpb #4080 |
00FFF155 025FED blo sieve2 |
00FFE17D 03A abx ; increment |
00FFE17E 0A7809E00000 sta TEXTSCR,x |
00FFE182 08C000FFF cmpx #4095 |
00FFE185 025FC7 blo multi_sieve1 |
00FFE187 05C incb ; number of cores working on it |
00FFE188 0C1FF0 cmpb #4080 |
00FFE18A 025FED blo sieve2 |
sieve4: ; hang machine |
00FFF157 013 sync |
00FFF158 016000836 lbra MonitorStart |
00FFE18C 039 rts |
|
;------------------------------------------------------------------------------ |
; Three second delay for user convenience and to allow some devices time to |
457,93 → 536,105
;------------------------------------------------------------------------------ |
|
Delay3s: |
00FFF15B 0CC895440 ldd #9000000 |
00FFE18D 0CC895440 ldd #9000000 |
dly3s1: |
00FFF15E 0C10FF cmpb #$FF |
00FFF160 026000 bne dly3s2 |
00FFE190 0C10FF cmpb #$FF |
00FFE192 026000 bne dly3s2 |
dly3s2: |
00FFF162 0150B7FFFE60000 sta LEDS |
00FFF167 083000001 subd #1 |
00FFF16A 026FF2 bne dly3s1 |
00FFF16C 039 rts |
00FFE194 0150B7FFFE60001 sta LEDS |
00FFE199 083000001 subd #1 |
00FFE19C 026FF2 bne dly3s1 |
00FFE19E 039 rts |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
ShiftLeft5: |
00FFF16D 058 aslb |
00FFF16E 049 rola |
00FFF16F 058 aslb |
00FFF170 049 rola |
00FFF171 058 aslb |
00FFF172 049 rola |
00FFF173 058 aslb |
00FFF174 049 rola |
00FFF175 058 aslb |
00FFF176 049 rola |
00FFF177 039 rts |
00FFE19F 058 aslb |
00FFE1A0 049 rola |
00FFE1A1 058 aslb |
00FFE1A2 049 rola |
00FFE1A3 058 aslb |
00FFE1A4 049 rola |
00FFE1A5 058 aslb |
00FFE1A6 049 rola |
00FFE1A7 058 aslb |
00FFE1A8 049 rola |
00FFE1A9 039 rts |
|
;------------------------------------------------------------------------------ |
; Parameters: |
; b = core id of core to copy |
;------------------------------------------------------------------------------ |
; |
CopyVirtualScreenToScreen: |
00FFF178 034076 pshs d,x,y,u |
00FFF17A 08D0B4 bsr GetScreenLocation |
00FFF17C 01F001 tfr d,x |
00FFF17E 18EE00000 ldy #TEXTSCR |
00FFF181 0CE00032C ldu #56*29/2 |
00FFE1AA 034076 pshs d,x,y,u |
; Compute virtual screen location for core passed in accb. |
00FFE1AC 01F098 tfr b,a |
00FFE1AE 048 asla |
00FFE1AF 048 asla |
00FFE1B0 048 asla |
00FFE1B1 048 asla |
00FFE1B2 08AC00 ora #$C00 |
00FFE1B4 05F clrb |
00FFE1B5 01F001 tfr d,x |
00FFE1B7 034006 pshs d |
00FFE1B9 18EE00000 ldy #TEXTSCR |
00FFE1BC 0CE00032C ldu #56*29/2 |
cv2s1: |
00FFF184 0EC801 ldd ,x++ |
00FFF186 0EDA01 std ,y++ |
00FFF188 0335FF leau -1,u |
00FFF18A 283000000 cmpu #0 |
00FFF18D 026FF5 bne cv2s1 |
00FFE1BF 0EC801 ldd ,x++ |
00FFE1C1 0EDA01 std ,y++ |
00FFE1C3 0335FF leau -1,u |
00FFE1C5 283000000 cmpu #0 |
00FFE1C8 026FF5 bne cv2s1 |
; reset the cursor position in the text controller |
00FFF18F 0D6110 ldb CursorRow |
00FFF191 086038 lda #56 |
00FFF193 03D mul |
00FFF194 01F001 tfr d,x |
00FFF196 0D6111 ldb CursorCol |
00FFF198 03A abx |
00FFF199 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOS |
00FFF19E 0350F6 puls d,x,y,u,pc |
00FFE1CA 035010 puls x |
00FFE1CC 0E6808110 ldb CursorRow,x |
00FFE1CF 086038 lda #56 |
00FFE1D1 03D mul |
00FFE1D2 01F002 tfr d,y |
00FFE1D4 0E6808111 ldb CursorCol,x |
00FFE1D7 01F021 tfr y,x |
00FFE1D9 03A abx |
00FFE1DA 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOS |
00FFE1DF 0350F6 puls d,x,y,u,pc |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
; |
CopyScreenToVirtualScreen: |
00FFF1A0 034076 pshs d,x,y,u |
00FFF1A2 08D08C bsr GetScreenLocation |
00FFF1A4 01F002 tfr d,y |
00FFF1A6 08EE00000 ldx #TEXTSCR |
00FFF1A9 0CE00032C ldu #56*29/2 |
00FFE1E1 034076 pshs d,x,y,u |
00FFE1E3 08D08D bsr GetScreenLocation |
00FFE1E5 01F002 tfr d,y |
00FFE1E7 08EE00000 ldx #TEXTSCR |
00FFE1EA 0CE00032C ldu #56*29/2 |
cs2v1: |
00FFF1AC 0EC801 ldd ,x++ |
00FFF1AE 0EDA01 std ,y++ |
00FFF1B0 0335FF leau -1,u |
00FFF1B2 283000000 cmpu #0 |
00FFF1B5 026FF5 bne cs2v1 |
00FFF1B7 0350F6 puls d,x,y,u,pc |
00FFE1ED 0EC801 ldd ,x++ |
00FFE1EF 0EDA01 std ,y++ |
00FFE1F1 0335FF leau -1,u |
00FFE1F3 283000000 cmpu #0 |
00FFE1F6 026FF5 bne cs2v1 |
00FFE1F8 0350F6 puls d,x,y,u,pc |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
00FFF1B9 054045058054053043052 fcb "TEXTSCR " |
00FFF1C0 020 |
00FFF1C1 FFF1CB fcw TextOpen |
00FFF1C3 FFF1CC fcw TextClose |
00FFF1C5 FFF1CD fcw TextRead |
00FFF1C7 FFF1CE fcw TextWrite |
00FFF1C9 FFF1CF fcw TextSeek |
00FFE1FA 054045058054053043052 fcb "TEXTSCR " |
00FFE201 020 |
00FFE202 FFE20C fcw TextOpen |
00FFE204 FFE20D fcw TextClose |
00FFE206 FFE20E fcw TextRead |
00FFE208 FFE20F fcw TextWrite |
00FFE20A FFE210 fcw TextSeek |
|
TextOpen: |
00FFF1CB 039 rts |
00FFE20C 039 rts |
TextClose: |
00FFF1CC 039 rts |
00FFE20D 039 rts |
TextRead: |
00FFF1CD 039 rts |
00FFE20E 039 rts |
TextWrite: |
00FFF1CE 039 rts |
00FFE20F 039 rts |
TextSeek: |
00FFF1CF 039 rts |
00FFE210 039 rts |
|
;------------------------------------------------------------------------------ |
; Clear the screen and the screen color memory |
555,29 → 646,29
;------------------------------------------------------------------------------ |
|
ClearScreen: |
00FFF1D0 034076 pshs d,x,y,u |
00FFF1D2 08E000658 ldx #56*29 |
00FFF1D5 01F013 tfr x,u |
00FFF1D7 08D057 bsr GetScreenLocation |
00FFF1D9 01F002 tfr d,y |
00FFF1DB 0C6020 ldb #' ' ; space char |
00FFE211 034076 pshs d,x,y,u |
00FFE213 08E000658 ldx #56*29 |
00FFE216 01F013 tfr x,u |
00FFE218 08D058 bsr GetScreenLocation |
00FFE21A 01F002 tfr d,y |
00FFE21C 0C6020 ldb #' ' ; space char |
cs1: |
00FFF1DD 0E7A00 stb ,y+ ; set text to space |
00FFF1DF 0301FF leax -1,x ; decrement x |
00FFF1E1 026FFA bne cs1 |
00FFF1E3 0150F6FFFFFFFE0 ldb COREID ; update colors only if we have focus |
00FFF1E8 0D1100 cmpb IOFocusID |
00FFF1EA 02000D bra cs3 |
00FFF1EC 18EE02000 ldy #TEXTSCR+$2000 |
00FFE21E 0E7A00 stb ,y+ ; set text to space |
00FFE220 0301FF leax -1,x ; decrement x |
00FFE222 026FFA bne cs1 |
00FFE224 0150F6FFFFFFFE0 ldb COREID ; update colors only if we have focus |
00FFE229 0F1FF0010 cmpb IOFocusID |
00FFE22C 02000D bra cs3 |
00FFE22E 18EE02000 ldy #TEXTSCR+$2000 |
; lda CharColor |
00FFF1EF 0860CE lda #$0CE |
00FFF1F1 01F031 tfr u,x ; get back count |
00FFE231 0860CE lda #$0CE |
00FFE233 01F031 tfr u,x ; get back count |
cs2: |
00FFF1F3 0A7A00 sta ,y+ |
00FFF1F5 0301FF leax -1,x ; decrement x |
00FFF1F7 026FFA bne cs2 |
00FFE235 0A7A00 sta ,y+ |
00FFE237 0301FF dex ; decrement x |
00FFE239 026FFA bne cs2 |
cs3: |
00FFF1F9 0350F6 puls d,x,y,u,pc |
00FFE23B 0350F6 puls d,x,y,u,pc |
|
;------------------------------------------------------------------------------ |
; Scroll text on the screen upwards |
587,20 → 678,20
;------------------------------------------------------------------------------ |
|
ScrollUp: |
00FFF1FB 034076 pshs d,x,y,u |
00FFF1FD 18E00032B ldy #(56*29-1)/2 ; y = num chars/2 to move |
00FFF200 08D02E bsr GetScreenLocation |
00FFF202 01F001 tfr d,x |
00FFF204 01F003 tfr d,u |
00FFF206 030038 leax 56,x ; x = index to source row |
00FFE23D 034076 pshs d,x,y,u |
00FFE23F 18E00032B ldy #(56*29-1)/2 ; y = num chars/2 to move |
00FFE242 08D02E bsr GetScreenLocation |
00FFE244 01F001 tfr d,x |
00FFE246 01F003 tfr d,u |
00FFE248 030038 leax 56,x ; x = index to source row |
scrup1: |
00FFF208 0EC801 ldd ,x++ ; move 2 characters |
00FFF20A 0EDC01 std ,u++ |
00FFF20C 0313FF leay -1,y |
00FFF20E 026FF8 bne scrup1 |
00FFF210 08601E lda #30 |
00FFF212 08D002 bsr BlankLine |
00FFF214 0350F6 puls d,x,y,u,pc |
00FFE24A 0EC801 ldd ,x++ ; move 2 characters |
00FFE24C 0EDC01 std ,u++ |
00FFE24E 0313FF dey |
00FFE250 026FF8 bne scrup1 |
00FFE252 08601D lda #29 |
00FFE254 08D002 bsr BlankLine |
00FFE256 0350F6 puls d,x,y,u,pc |
|
;------------------------------------------------------------------------------ |
; Blank out a line on the display |
612,21 → 703,21
;------------------------------------------------------------------------------ |
|
BlankLine: |
00FFF216 034016 pshs d,x |
00FFF218 034002 pshs a |
00FFF21A 08D014 bsr GetScreenLocation |
00FFF21C 01F001 tfr d,x |
00FFF21E 035002 puls a |
00FFF220 0C6038 ldb #56 ; b = # chars to blank out from video controller |
00FFF222 03D mul ; d = screen index (row# * #cols) |
00FFF223 03080B leax d,x |
00FFF225 086020 lda #' ' |
00FFF227 0C6038 ldb #56 ; b = # chars to blank out from video controller |
00FFE258 034016 pshs d,x |
00FFE25A 034002 pshs a |
00FFE25C 08D014 bsr GetScreenLocation |
00FFE25E 01F001 tfr d,x |
00FFE260 035002 puls a |
00FFE262 0C6038 ldb #56 ; b = # chars to blank out from video controller |
00FFE264 03D mul ; d = screen index (row# * #cols) |
00FFE265 03080B leax d,x |
00FFE267 086020 lda #' ' |
00FFE269 0C6038 ldb #56 ; b = # chars to blank out from video controller |
blnkln1: |
00FFF229 0A7800 sta ,x+ |
00FFF22B 05A decb |
00FFF22C 026FFB bne blnkln1 |
00FFF22E 035096 puls d,x,pc |
00FFE26B 0A7800 sta ,x+ |
00FFE26D 05A decb |
00FFE26E 026FFB bne blnkln1 |
00FFE270 035096 puls d,x,pc |
|
;------------------------------------------------------------------------------ |
; Get the location of the screen memory. The location |
639,14 → 730,14
;------------------------------------------------------------------------------ |
|
GetScreenLocation: |
00FFF230 0150B6FFFFFFFE0 lda COREID ; which core are we? |
00FFF235 091100 cmpa IOFocusID ; do we have the IO focus |
00FFF237 026004 bne gsl1 ; no, go pick virtual screen address |
00FFF239 0CCE00000 ldd #TEXTSCR ; yes, we update the real screen |
00FFF23C 039 rts |
00FFE272 0150B6FFFFFFFE0 lda COREID ; which core are we? |
00FFE277 0B1FF0010 cmpa IOFocusID ; do we have the IO focus |
00FFE27A 026004 bne gsl1 ; no, go pick virtual screen address |
00FFE27C 0CCE00000 ldd #TEXTSCR ; yes, we update the real screen |
00FFE27F 039 rts |
gsl1: |
00FFF23D 0CC007800 ldd #$7800 |
00FFF240 039 rts |
00FFE280 0CC007800 ldd #$7800 |
00FFE283 039 rts |
|
;------------------------------------------------------------------------------ |
; HomeCursor |
657,16 → 748,16
;------------------------------------------------------------------------------ |
|
HomeCursor: |
00FFF241 034016 pshs d,x |
00FFF243 00F110 clr CursorRow |
00FFF245 00F111 clr CursorCol |
00FFF247 0150F6FFFFFFFE0 ldb COREID |
00FFF24C 0D1100 cmpb IOFocusID |
00FFF24E 026006 bne hc1 |
00FFF250 04F clra |
00FFF251 0150B7FFFE0DF22 sta TEXTREG+TEXT_CURPOS |
00FFE284 034016 pshs d,x |
00FFE286 00F110 clr CursorRow |
00FFE288 00F111 clr CursorCol |
00FFE28A 0150F6FFFFFFFE0 ldb COREID |
00FFE28F 0F1FF0010 cmpb IOFocusID |
00FFE292 026006 bne hc1 |
00FFE294 04F clra |
00FFE295 0150B7FFFE0DF22 sta TEXTREG+TEXT_CURPOS |
hc1: |
00FFF256 035096 puls d,x,pc |
00FFE29A 035096 puls d,x,pc |
|
;------------------------------------------------------------------------------ |
; Update the cursor position in the text controller based on the |
677,20 → 768,20
;------------------------------------------------------------------------------ |
; |
UpdateCursorPos: |
00FFF258 034016 pshs d,x |
00FFF25A 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller |
00FFF25F 0D1100 cmpb IOFocusID ; only for the task with the output focus |
00FFF261 026014 bne ucp1 |
00FFF263 096110 lda CursorRow |
00FFF265 08403F anda #$3F ; limit of 63 rows |
00FFF267 0150F6FFFE0DF00 ldb TEXTREG+TEXT_COLS |
00FFF26C 03D mul |
00FFF26D 01F001 tfr d,x |
00FFF26F 0D6111 ldb CursorCol |
00FFF271 03A abx |
00FFF272 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOS |
00FFE29C 034016 pshs d,x |
00FFE29E 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller |
00FFE2A3 0F1FF0010 cmpb IOFocusID ; only for the task with the output focus |
00FFE2A6 026014 bne ucp1 |
00FFE2A8 096110 lda CursorRow |
00FFE2AA 08403F anda #$3F ; limit of 63 rows |
00FFE2AC 0150F6FFFE0DF00 ldb TEXTREG+TEXT_COLS |
00FFE2B1 03D mul |
00FFE2B2 01F001 tfr d,x |
00FFE2B4 0D6111 ldb CursorCol |
00FFE2B6 03A abx |
00FFE2B7 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOS |
ucp1: |
00FFF277 035096 puls d,x,pc |
00FFE2BC 035096 puls d,x,pc |
|
;------------------------------------------------------------------------------ |
; Calculate screen memory location from CursorRow,CursorCol. |
703,22 → 794,22
;------------------------------------------------------------------------------ |
; |
CalcScreenLoc: |
00FFF279 034010 pshs x |
00FFF27B 096110 lda CursorRow |
00FFF27D 0C6038 ldb #56 |
00FFF27F 03D mul |
00FFF280 01F001 tfr d,x |
00FFF282 0D6111 ldb CursorCol |
00FFF284 03A abx |
00FFF285 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller |
00FFF28A 0D1100 cmpb IOFocusID ; only for the task with the output focus |
00FFF28C 026005 bne csl1 |
00FFF28E 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOS |
00FFE2BE 034010 pshs x |
00FFE2C0 096110 lda CursorRow |
00FFE2C2 0C6038 ldb #56 |
00FFE2C4 03D mul |
00FFE2C5 01F001 tfr d,x |
00FFE2C7 0D6111 ldb CursorCol |
00FFE2C9 03A abx |
00FFE2CA 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller |
00FFE2CF 0F1FF0010 cmpb IOFocusID ; only for the task with the output focus |
00FFE2D2 026005 bne csl1 |
00FFE2D4 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOS |
csl1: |
00FFF293 08DF9B bsr GetScreenLocation |
00FFF295 03080B leax d,x |
00FFF297 01F010 tfr x,d |
00FFF299 035090 puls x,pc |
00FFE2D9 08DF97 bsr GetScreenLocation |
00FFE2DB 03080B leax d,x |
00FFE2DD 01F010 tfr x,d |
00FFE2DF 035090 puls x,pc |
|
;------------------------------------------------------------------------------ |
; Display a character on the screen. |
732,101 → 823,104
;------------------------------------------------------------------------------ |
; |
DisplayChar: |
00FFF29B 034016 pshs d,x |
00FFF29D 0C100D cmpb #CR ; carriage return ? |
00FFF29F 026006 bne dccr |
00FFF2A1 00F111 clr CursorCol ; just set cursor column to zero on a CR |
00FFF2A3 08DFB3 bsr UpdateCursorPos |
00FFE2E1 017000924 lbsr SerialPutChar |
00FFE2E4 034016 pshs d,x |
00FFE2E6 0C100D cmpb #CR ; carriage return ? |
00FFE2E8 026007 bne dccr |
00FFE2EA 00F111 clr CursorCol ; just set cursor column to zero on a CR |
00FFE2EC 08DFAE bsr UpdateCursorPos |
dcx14: |
00FFF2A5 035096 puls d,x,pc |
00FFE2EE 01600008C lbra dcx4 |
dccr: |
00FFF2A7 0C1091 cmpb #$91 ; cursor right ? |
00FFF2A9 02600D bne dcx6 |
00FFF2AB 096111 lda CursorCol |
00FFF2AD 081038 cmpa #56 |
00FFF2AF 024003 bhs dcx7 |
00FFF2B1 04C inca |
00FFF2B2 097111 sta CursorCol |
00FFE2F1 0C1091 cmpb #$91 ; cursor right ? |
00FFE2F3 02600D bne dcx6 |
00FFE2F5 096111 lda CursorCol |
00FFE2F7 081038 cmpa #56 |
00FFE2F9 024003 bhs dcx7 |
00FFE2FB 04C inca |
00FFE2FC 097111 sta CursorCol |
dcx7: |
00FFF2B4 08DFA2 bsr UpdateCursorPos |
00FFF2B6 035096 puls d,x,pc |
00FFE2FE 08DF9C bsr UpdateCursorPos |
00FFE300 035096 puls d,x,pc |
dcx6: |
00FFF2B8 0C1090 cmpb #$90 ; cursor up ? |
00FFF2BA 026009 bne dcx8 |
00FFF2BC 096110 lda CursorRow |
00FFF2BE 027FF4 beq dcx7 |
00FFF2C0 04A deca |
00FFF2C1 097110 sta CursorRow |
00FFF2C3 020FEF bra dcx7 |
00FFE302 0C1090 cmpb #$90 ; cursor up ? |
00FFE304 026009 bne dcx8 |
00FFE306 096110 lda CursorRow |
00FFE308 027FF4 beq dcx7 |
00FFE30A 04A deca |
00FFE30B 097110 sta CursorRow |
00FFE30D 020FEF bra dcx7 |
dcx8: |
00FFF2C5 0C1093 cmpb #$93 ; cursor left ? |
00FFF2C7 026009 bne dcx9 |
00FFF2C9 096111 lda CursorCol |
00FFF2CB 027FE7 beq dcx7 |
00FFF2CD 04A deca |
00FFF2CE 097111 sta CursorCol |
00FFF2D0 020FE2 bra dcx7 |
00FFE30F 0C1093 cmpb #$93 ; cursor left ? |
00FFE311 026009 bne dcx9 |
00FFE313 096111 lda CursorCol |
00FFE315 027FE7 beq dcx7 |
00FFE317 04A deca |
00FFE318 097111 sta CursorCol |
00FFE31A 020FE2 bra dcx7 |
dcx9: |
00FFF2D2 0C1092 cmpb #$92 ; cursor down ? |
00FFF2D4 02600B bne dcx10 |
00FFF2D6 096110 lda CursorRow |
00FFF2D8 08101D cmpa #29 |
00FFF2DA 027FD8 beq dcx7 |
00FFF2DC 04C inca |
00FFF2DD 097110 sta CursorRow |
00FFF2DF 020FD3 bra dcx7 |
00FFE31C 0C1092 cmpb #$92 ; cursor down ? |
00FFE31E 02600B bne dcx10 |
00FFE320 096110 lda CursorRow |
00FFE322 08101D cmpa #29 |
00FFE324 027FD8 beq dcx7 |
00FFE326 04C inca |
00FFE327 097110 sta CursorRow |
00FFE329 020FD3 bra dcx7 |
dcx10: |
00FFF2E1 0C1094 cmpb #$94 ; cursor home ? |
00FFF2E3 02600C bne dcx11 |
00FFF2E5 096111 lda CursorCol |
00FFF2E7 027004 beq dcx12 |
00FFF2E9 00F111 clr CursorCol |
00FFF2EB 020FC7 bra dcx7 |
00FFE32B 0C1094 cmpb #$94 ; cursor home ? |
00FFE32D 02600C bne dcx11 |
00FFE32F 096111 lda CursorCol |
00FFE331 027004 beq dcx12 |
00FFE333 00F111 clr CursorCol |
00FFE335 020FC7 bra dcx7 |
dcx12: |
00FFF2ED 00F110 clr CursorRow |
00FFF2EF 020FC3 bra dcx7 |
00FFE337 00F110 clr CursorRow |
00FFE339 020FC3 bra dcx7 |
dcx11: |
00FFF2F1 0C1099 cmpb #$99 ; delete ? |
00FFF2F3 026008 bne dcx13 |
00FFF2F5 08DF82 bsr CalcScreenLoc |
00FFF2F7 01F001 tfr d,x |
00FFF2F9 096111 lda CursorCol ; acc = cursor column |
00FFF2FB 02000D bra dcx5 |
00FFE33B 0C1099 cmpb #$99 ; delete ? |
00FFE33D 026008 bne dcx13 |
00FFE33F 08DF7D bsr CalcScreenLoc |
00FFE341 01F001 tfr d,x |
00FFE343 096111 lda CursorCol ; acc = cursor column |
00FFE345 020011 bra dcx5 |
dcx13 |
00FFF2FD 0C1008 cmpb #CTRLH ; backspace ? |
00FFF2FF 02601A bne dcx3 |
00FFF301 096111 lda CursorCol |
00FFF303 02702A beq dcx4 |
00FFF305 04A deca |
00FFF306 097111 sta CursorCol |
00FFF308 08DF6F bsr CalcScreenLoc |
00FFE347 0C1008 cmpb #CTRLH ; backspace ? |
00FFE349 02601E bne dcx3 |
00FFE34B 096111 lda CursorCol |
00FFE34D 02702E beq dcx4 |
00FFE34F 04A deca |
00FFE350 097111 sta CursorCol |
00FFE352 08DF6A bsr CalcScreenLoc |
00FFE354 01F001 tfr d,x |
00FFE356 096111 lda CursorCol |
dcx5: |
00FFF30A 0E6001 ldb 1,x |
00FFF30C 0E7801 stb ,x++ |
00FFF30E 04C inca |
00FFF30F 081038 cmpa #56 |
00FFF311 025FF7 blo dcx5 |
00FFF313 0C6020 ldb #' ' |
00FFF315 0301FF leax -1,x |
00FFF317 0E7804 stb ,x |
00FFF319 03509E puls d,x,dp,pc |
00FFE358 0E6001 ldb 1,x |
00FFE35A 0E7801 stb ,x++ |
00FFE35C 04C inca |
00FFE35D 081038 cmpa #56 |
00FFE35F 025FF7 blo dcx5 |
00FFE361 0C6020 ldb #' ' |
00FFE363 0301FF dex |
00FFE365 0E7804 stb ,x |
00FFE367 020014 bra dcx4 |
dcx3: |
00FFF31B 0C100A cmpb #LF ; linefeed ? |
00FFF31D 02700E beq dclf |
00FFF31F 034004 pshs b |
00FFF321 08DF56 bsr CalcScreenLoc |
00FFF323 01F001 tfr d,x |
00FFF325 035004 puls b |
00FFF327 0E7804 stb ,x |
00FFE369 0C100A cmpb #LF ; linefeed ? |
00FFE36B 02700E beq dclf |
00FFE36D 034004 pshs b |
00FFE36F 08DF4D bsr CalcScreenLoc |
00FFE371 01F001 tfr d,x |
00FFE373 035004 puls b |
00FFE375 0E7804 stb ,x |
; ToDo character color |
; lda CharColor |
; sta $2000,x |
00FFF329 08D006 bsr IncCursorPos |
00FFF32B 035096 puls d,x,pc |
00FFE377 08D006 bsr IncCursorPos |
00FFE379 020002 bra dcx4 |
dclf: |
00FFF32D 08D011 bsr IncCursorRow |
00FFE37B 08D011 bsr IncCursorRow |
dcx4: |
00FFF32F 035096 puls d,x,pc |
00FFE37D 035096 puls d,x,pc |
|
;------------------------------------------------------------------------------ |
; Increment the cursor position, scroll the screen if needed. |
836,29 → 930,29
;------------------------------------------------------------------------------ |
|
IncCursorPos: |
00FFF331 034016 pshs d,x |
00FFF333 096111 lda CursorCol |
00FFF335 04C inca |
00FFF336 097111 sta CursorCol |
00FFF338 081038 cmpa #56 |
00FFF33A 025014 blo icc1 |
00FFF33C 00F111 clr CursorCol ; column = 0 |
00FFF33E 020002 bra icr1 |
00FFE37F 034016 pshs d,x |
00FFE381 096111 lda CursorCol |
00FFE383 04C inca |
00FFE384 097111 sta CursorCol |
00FFE386 081038 cmpa #56 |
00FFE388 025014 blo icc1 |
00FFE38A 00F111 clr CursorCol ; column = 0 |
00FFE38C 020002 bra icr1 |
IncCursorRow: |
00FFF340 034016 pshs d,x |
00FFE38E 034016 pshs d,x |
icr1: |
00FFF342 096110 lda CursorRow |
00FFF344 04C inca |
00FFF345 097110 sta CursorRow |
00FFF347 08101D cmpa #29 |
00FFF349 025005 blo icc1 |
00FFF34B 04A deca ; backup the cursor row, we are scrolling up |
00FFF34C 097110 sta CursorRow |
00FFF34E 08DEAB bsr ScrollUp |
00FFE390 096110 lda CursorRow |
00FFE392 04C inca |
00FFE393 097110 sta CursorRow |
00FFE395 08101D cmpa #29 |
00FFE397 025005 blo icc1 |
00FFE399 04A deca ; backup the cursor row, we are scrolling up |
00FFE39A 097110 sta CursorRow |
00FFE39C 08DE9F bsr ScrollUp |
icc1: |
00FFF350 08DF06 bsr UpdateCursorPos |
00FFE39E 08DEFC bsr UpdateCursorPos |
icc2: |
00FFF352 035096 puls d,x,pc |
00FFE3A0 035096 puls d,x,pc |
|
;------------------------------------------------------------------------------ |
; Display a string on the screen. |
870,97 → 964,437
;------------------------------------------------------------------------------ |
; |
DisplayString: |
00FFF354 034016 pshs d,x |
00FFF356 01F001 tfr d,x |
00FFE3A2 034016 pshs d,x |
00FFE3A4 01F001 tfr d,x |
dspj2: ; lock semaphore for access |
00FFE3A6 0B6EF0001 lda OUTSEMA+1 |
00FFE3A9 027FFB beq dspj2 |
dspj1B: |
00FFF358 0E6800 ldb ,x+ ; move string char into acc |
00FFF35A 027004 beq dsretB ; is it end of string ? |
00FFF35C 08D61E bsr OUTCH ; display character |
00FFF35E 020FF8 bra dspj1B |
00FFE3AB 0E6800 ldb ,x+ ; move string char into acc |
00FFE3AD 027005 beq dsretB ; is it end of string ? |
00FFE3AF 017000960 lbsr OUTCH ; display character |
00FFE3B2 020FF7 bra dspj1B |
dsretB: |
00FFF360 035096 puls d,x,pc |
00FFE3B4 07FEF0001 clr OUTSEMA+1 ; unlock semaphore |
00FFE3B7 035096 puls d,x,pc |
|
DisplayStringCRLF: |
00FFF362 034006 pshs d |
00FFF364 08DFEE bsr DisplayString |
00FFF366 0C600D ldb #CR |
00FFF368 08D612 bsr OUTCH |
00FFF36A 0C600A ldb #LF |
00FFF36C 08D60E bsr OUTCH |
00FFF36E 035086 puls d,pc |
00FFE3B9 034006 pshs d |
00FFE3BB 08DFE5 bsr DisplayString |
00FFE3BD 0C600D ldb #CR |
00FFE3BF 017000950 lbsr OUTCH |
00FFE3C2 0C600A ldb #LF |
00FFE3C4 01700094B lbsr OUTCH |
00FFE3C7 035086 puls d,pc |
|
; |
; PRINT CR, LF, STRING |
; |
PSTRNG |
00FFF370 08D002 BSR PCRLF |
00FFF372 02000D BRA PDATA |
00FFE3C9 08D002 BSR PCRLF |
00FFE3CB 02000D BRA PDATA |
PCRLF |
00FFF374 034010 PSHS X |
00FFF376 08EFFF388 LDX #CRLFST |
00FFF379 08D006 BSR PDATA |
00FFF37B 035010 PULS X |
00FFF37D 039 RTS |
00FFE3CD 034010 PSHS X |
00FFE3CF 08EFFE3E1 LDX #CRLFST |
00FFE3D2 08D006 BSR PDATA |
00FFE3D4 035010 PULS X |
00FFE3D6 039 RTS |
|
PRINT |
00FFF37E 0BDFFF97C JSR OUTCH |
00FFE3D7 0BDFFED12 JSR OUTCH |
PDATA |
00FFF381 0E6800 LDB ,X+ |
00FFF383 0C1004 CMPB #$04 |
00FFF385 026FF7 BNE PRINT |
00FFF387 039 RTS |
00FFE3DA 0E6800 LDB ,X+ |
00FFE3DC 0C1004 CMPB #$04 |
00FFE3DE 026FF7 BNE PRINT |
00FFE3E0 039 RTS |
|
CRLFST |
00FFF388 00D00A004 fcb CR,LF,4 |
00FFE3E1 00D00A004 fcb CR,LF,4 |
|
DispDWordAsHex: |
00FFF38B 08D007 bsr DispWordAsHex |
00FFF38D 01E001 exg d,x |
00FFF38F 08D003 bsr DispWordAsHex |
00FFF391 01E001 exg d,x |
00FFF393 039 rts |
00FFE3E4 08D007 bsr DispWordAsHex |
00FFE3E6 01E001 exg d,x |
00FFE3E8 08D003 bsr DispWordAsHex |
00FFE3EA 01E001 exg d,x |
00FFE3EC 039 rts |
|
DispWordAsHex: |
00FFF394 01E089 exg a,b |
00FFF396 08D005 bsr DispByteAsHex |
00FFF398 01E089 exg a,b |
00FFF39A 08D001 bsr DispByteAsHex |
00FFF39C 039 rts |
00FFE3ED 01E089 exg a,b |
00FFE3EF 08D005 bsr DispByteAsHex |
00FFE3F1 01E089 exg a,b |
00FFE3F3 08D001 bsr DispByteAsHex |
00FFE3F5 039 rts |
|
DispByteAsHex: |
00FFF39D 034004 pshs b |
00FFF39F 054 lsrb |
00FFF3A0 054 lsrb |
00FFF3A1 054 lsrb |
00FFF3A2 054 lsrb |
00FFF3A3 054 lsrb |
00FFF3A4 054 lsrb |
00FFF3A5 054 lsrb |
00FFF3A6 054 lsrb |
00FFF3A7 08D00C bsr DispNyb |
00FFF3A9 035004 puls b |
00FFF3AB 034004 pshs b |
00FFF3AD 054 lsrb |
00FFF3AE 054 lsrb |
00FFF3AF 054 lsrb |
00FFF3B0 054 lsrb |
00FFF3B1 08D002 bsr DispNyb |
00FFF3B3 035004 puls b |
00FFE3F6 034004 pshs b |
00FFE3F8 054 lsrb |
00FFE3F9 054 lsrb |
00FFE3FA 054 lsrb |
00FFE3FB 054 lsrb |
00FFE3FC 054 lsrb |
00FFE3FD 054 lsrb |
00FFE3FE 054 lsrb |
00FFE3FF 054 lsrb |
00FFE400 08D00C bsr DispNyb |
00FFE402 035004 puls b |
00FFE404 034004 pshs b |
00FFE406 054 lsrb |
00FFE407 054 lsrb |
00FFE408 054 lsrb |
00FFE409 054 lsrb |
00FFE40A 08D002 bsr DispNyb |
00FFE40C 035004 puls b |
|
DispNyb |
00FFF3B5 034004 pshs b |
00FFF3B7 0C400F andb #$0F |
00FFF3B9 0C100A cmpb #10 |
00FFF3BB 025006 blo DispNyb1 |
00FFF3BD 0CB037 addb #'A'-10 |
00FFF3BF 08D5BB bsr OUTCH |
00FFF3C1 035084 puls b,pc |
00FFE40E 034004 pshs b |
00FFE410 0C400F andb #$0F |
00FFE412 0C100A cmpb #10 |
00FFE414 025007 blo DispNyb1 |
00FFE416 0CB037 addb #'A'-10 |
00FFE418 0170008F7 lbsr OUTCH |
00FFE41B 035084 puls b,pc |
DispNyb1 |
00FFF3C3 0CB030 addb #'0' |
00FFF3C5 08D5B5 bsr OUTCH |
00FFF3C7 035084 puls b,pc |
00FFE41D 0CB030 addb #'0' |
00FFE41F 0170008F0 lbsr OUTCH |
00FFE422 035084 puls b,pc |
|
;============================================================================== |
; Timer |
;============================================================================== |
|
; ============================================================================ |
; __ |
; \\__/ o\ (C) 2022 Robert Finch, Waterloo |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; Timer routines for a WDC6522 compatible circuit. |
; |
; This source file is free software: you can redistribute it and/or modify |
; it under the terms of the GNU Lesser General Public License as published |
; by the Free Software Foundation, either version 3 of the License, or |
; (at your option) any later version. |
; |
; This source file is distributed in the hope that it will be useful, |
; but WITHOUT ANY WARRANTY; without even the implied warranty of |
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
; GNU General Public License for more details. |
; |
; You should have received a copy of the GNU General Public License |
; along with this program. If not, see <http://www.gnu.org/licenses/>. |
; |
; ============================================================================ |
; |
TimerInit: |
00FFE424 0CC061A80 ldd #$61A80 ; compare to 400000 (100 Hz assuming 40MHz clock) |
00FFE427 0150F7FFFE60014 stb VIA+VIA_T3CMPL |
00FFE42C 0150B7FFFE60015 sta VIA+VIA_T3CMPH |
00FFE431 01507FFFFE60012 clr VIA+VIA_T3LL |
00FFE436 01507FFFFE60013 clr VIA+VIA_T3LH |
00FFE43B 0150B6FFFE6000B lda VIA+VIA_ACR ; set continuous mode for timer |
00FFE440 08A100 ora #$100 |
00FFE442 0150B7FFFE6000B sta VIA+VIA_ACR ; enable timer #3 interrupts |
00FFE447 086810 lda #$810 |
00FFE449 0150B7FFFE6000E sta VIA+VIA_IER |
00FFE44E 039 rts |
|
TimerIRQ: |
; Reset the edge sense circuit in the PIC |
00FFE44F 08601F lda #31 ; Timer is IRQ #31 |
00FFE451 0B7FF0011 sta IrqSource ; stuff a byte indicating the IRQ source for PEEK() |
00FFE454 0150B7FFFE3F010 sta PIC+16 ; register 16 is edge sense reset reg |
00FFE459 0150B6FFFE6000D lda VIA+VIA_IFR |
00FFE45E 02A011 bpl notTimerIRQ |
00FFE460 085800 bita #$800 |
00FFE462 02700D beq notTimerIRQ |
00FFE464 01507FFFFE60012 clr VIA+VIA_T3LL |
00FFE469 01507FFFFE60013 clr VIA+VIA_T3LH |
00FFE46E 07CE00037 inc $E00037 ; update timer IRQ screen flag |
notTimerIRQ: |
00FFE471 039 rts |
|
|
|
; ============================================================================ |
; __ |
; \\__/ o\ (C) 2013-2022 Robert Finch, Waterloo |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; BSD 3-Clause License |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; |
; 1. Redistributions of source code must retain the above copyright notice, this |
; list of conditions and the following disclaimer. |
; |
; 2. Redistributions in binary form must reproduce the above copyright notice, |
; this list of conditions and the following disclaimer in the documentation |
; and/or other materials provided with the distribution. |
; |
; 3. Neither the name of the copyright holder nor the names of its |
; contributors may be used to endorse or promote products derived from |
; this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
; |
; ============================================================================ |
; |
;=============================================================================== |
; Generic I2C routines |
; |
; It is assumed there may be more than one I2C controller in the system, so |
; the address of the controller is passed in the X register. |
;=============================================================================== |
|
I2C_PREL EQU $0 |
I2C_PREH EQU $1 |
I2C_CTRL EQU $2 |
I2C_RXR EQU $3 |
I2C_TXR EQU $3 |
I2C_CMD EQU $4 |
I2C_STAT EQU $4 |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; i2c initialization, sets the clock prescaler |
; |
; Parameters: |
; x = I2C controller address |
; Returns: none |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
_i2c_init: |
00FFE472 034004 pshs b |
00FFE474 0C6004 ldb #4 ; setup prescale for 400kHz clock |
00FFE476 0E7804 stb I2C_PREL,x |
00FFE478 06F001 clr I2C_PREH,x |
00FFE47A 035084 puls b,pc |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Wait for I2C transfer to complete |
; |
; Parameters |
; x - I2C controller base address |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
i2c_wait_tip: |
00FFE47C 034004 pshs b |
i2cw1: |
00FFE47E 0E6004 ldb I2C_STAT,x ; would use lvb, but lb is okay since its the I/O area |
00FFE480 0C5001 bitb #1 ; wait for tip to clear |
00FFE482 026FFA bne i2cw1 |
00FFE484 035084 puls b,pc |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Write command to i2c |
; |
; Parameters |
; accb - data to transmit |
; acca - command value |
; x - I2C controller base address |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
i2c_wr_cmd: |
00FFE486 0E7003 stb I2C_TXR,x |
00FFE488 0A7004 sta I2C_CMD,x |
00FFE48A 08DFF0 bsr i2c_wait_tip |
00FFE48C 0E6004 ldb I2C_STAT,x |
00FFE48E 039 rts |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Parameters |
; x - I2C controller base address |
; accb - data to send |
; Returns: none |
; Stack space: 2 words |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
_i2c_xmit1: |
00FFE48F 034006 pshs d ; save data value |
00FFE491 034006 pshs d ; and save it again |
00FFE493 0C6001 ldb #1 |
00FFE495 0E7002 stb I2C_CTRL,x ; enable the core |
00FFE497 0C6076 ldb #$76 ; set slave address = %0111011 |
00FFE499 086090 lda #$90 ; set STA, WR |
00FFE49B 08DFE9 bsr i2c_wr_cmd |
00FFE49D 08D00A bsr i2c_wait_rx_nack |
00FFE49F 035006 puls d ; get back data value |
00FFE4A1 086050 lda #$50 ; set STO, WR |
00FFE4A3 08DFE1 bsr i2c_wr_cmd |
00FFE4A5 08D002 bsr i2c_wait_rx_nack |
00FFE4A7 035086 puls d,pc |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
i2c_wait_rx_nack: |
00FFE4A9 034004 pshs b ; save off accb |
i2cwr1: |
00FFE4AB 0E6004 ldb I2C_STAT,x ; wait for RXack = 0 |
00FFE4AD 0C5080 bitb #$80 ; test for nack |
00FFE4AF 026FFA bne i2cwr1 |
00FFE4B1 035084 puls b,pc |
|
; ============================================================================ |
; __ |
; \\__/ o\ (C) 2022 Robert Finch, Waterloo |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; BSD 3-Clause License |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; |
; 1. Redistributions of source code must retain the above copyright notice, this |
; list of conditions and the following disclaimer. |
; |
; 2. Redistributions in binary form must reproduce the above copyright notice, |
; this list of conditions and the following disclaimer in the documentation |
; and/or other materials provided with the distribution. |
; |
; 3. Neither the name of the copyright holder nor the names of its |
; contributors may be used to endorse or promote products derived from |
; this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
; |
; ============================================================================ |
|
;=============================================================================== |
; Realtime clock routines |
;=============================================================================== |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Read the real-time-clock chip. |
; |
; The entire contents of the clock registers and sram are read into a buffer |
; in one-shot rather than reading the registers individually. |
; |
; Parameters: none |
; Returns: d = 0 on success, otherwise non-zero |
; Modifies: d and RTCBuf |
; Stack space: 6 words |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
rtc_read: |
00FFE4B3 08EE30500 ldx #RTC |
00FFE4B6 18E007FC0 ldy #RTCBuf |
00FFE4B9 0C6080 ldb #$80 |
00FFE4BB 0E7002 stb I2C_CTRL,x ; enable I2C |
00FFE4BD 0CC0900DE ldd #$900DE ; read address, write op, STA + wr bit |
00FFE4C0 08DFC4 bsr i2c_wr_cmd |
00FFE4C2 0C5080 bitb #$80 |
00FFE4C4 02603C bne rtc_rxerr |
00FFE4C6 0CC010000 ldd #$10000 ; address zero, wr bit |
00FFE4C9 08DFBB bsr i2c_wr_cmd |
00FFE4CB 0C5080 bitb #$80 |
00FFE4CD 026033 bne rtc_rxerr |
00FFE4CF 0CC0900DF ldd #$900DF ; read address, read op, STA + wr bit |
00FFE4D2 08DFB2 bsr i2c_wr_cmd |
00FFE4D4 0C5080 bitb #$80 |
00FFE4D6 02602A bne rtc_rxerr |
|
00FFE4D8 05F clrb |
rtcr0001: |
00FFE4D9 086020 lda #$20 |
00FFE4DB 0A7004 sta I2C_CMD,x ; rd bit |
00FFE4DD 08DF9D bsr i2c_wait_tip |
00FFE4DF 08DFC8 bsr i2c_wait_rx_nack |
00FFE4E1 0A6004 lda I2C_STAT,x |
00FFE4E3 085080 bita #$80 |
00FFE4E5 02601B bne rtc_rxerr |
00FFE4E7 0A6003 lda I2C_RXR,x |
00FFE4E9 0A7A07 sta b,y |
00FFE4EB 05C incb |
00FFE4EC 0C105F cmpb #$5F |
00FFE4EE 025FE9 blo rtcr0001 |
00FFE4F0 086068 lda #$68 |
00FFE4F2 0A7004 sta I2C_CMD,x ; STO, rd bit + nack |
00FFE4F4 08DF86 bsr i2c_wait_tip |
00FFE4F6 0A6004 lda I2C_STAT,x |
00FFE4F8 085080 bita #$80 |
00FFE4FA 026006 bne rtc_rxerr |
00FFE4FC 0A6003 lda I2C_RXR,x |
00FFE4FE 0A7A07 sta b,y |
00FFE500 04F05F clrd ; return 0 |
rtc_rxerr: |
00FFE502 06F002 clr I2C_CTRL,x ; disable I2C and return status |
00FFE504 04F clra |
00FFE505 039 rts |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Write the real-time-clock chip. |
; |
; The entire contents of the clock registers and sram are written from a |
; buffer (RTCBuf) in one-shot rather than writing the registers individually. |
; |
; Parameters: none |
; Returns: r1 = 0 on success, otherwise non-zero |
; Modifies: r1 and RTCBuf |
; Stack space: 6 words |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
rtc_write: |
00FFE506 08EE30500 ldx #RTC |
00FFE509 18E007FC0 ldy #RTCBuf |
|
00FFE50C 0C6080 ldb #$80 |
00FFE50E 0E7002 stb I2C_CTRL,x ; enable I2C |
00FFE510 0CC0900DE ldd #$900DE ; read address, write op, STA + wr bit |
00FFE513 08DF71 bsr i2c_wr_cmd |
00FFE515 0C5080 bitb #$80 |
00FFE517 026FE9 bne rtc_rxerr |
00FFE519 0CC010000 ldd #$10000 ; address zero, wr bit |
00FFE51C 08DF68 bsr i2c_wr_cmd |
00FFE51E 0C5080 bitb #$80 |
00FFE520 026FE0 bne rtc_rxerr |
|
00FFE522 0C6000 ldb #0 |
rtcw0001: |
00FFE524 034004 pshs b |
00FFE526 0E6A05 ldb b,y |
00FFE528 086010 lda #$10 |
00FFE52A 08DF5A bsr i2c_wr_cmd |
00FFE52C 0C5080 bitb #$80 |
00FFE52E 035004 puls b |
00FFE530 026FD0 bne rtc_rxerr |
00FFE532 05C incb |
00FFE533 0C105F cmpb #$5F |
00FFE535 025FED blo rtcw0001 |
00FFE537 0E6A05 ldb b,y |
00FFE539 086050 lda #$50 ; STO, wr bit |
00FFE53B 08DF49 bsr i2c_wr_cmd |
00FFE53D 0C5080 bitb #$80 |
00FFE53F 026FC1 bne rtc_rxerr |
00FFE541 04F05F clrd ; return 0 |
00FFE543 06F002 clr I2C_CTRL,x ; disable I2C and return status |
00FFE545 039 rts |
|
;============================================================================== |
; Keyboard I/O |
;============================================================================== |
|
971,207 → 1405,207
org (* + 127) & $FFFFFF80 |
|
unshiftedScanCodes: |
00FFF400 02E0A902E0A50A30A10A2 fcb $2e,$a9,$2e,$a5,$a3,$a1,$a2,$ac |
00FFF407 0AC |
00FFF408 02E0AA0A80A60A4009060 fcb $2e,$aa,$a8,$a6,$a4,$09,$60,$2e |
00FFF40F 02E |
00FFF410 02E02E02E02E02E071031 fcb $2e,$2e,$2e,$2e,$2e,$71,$31,$2e |
00FFF417 02E |
00FFF418 02E02E07A073061077032 fcb $2e,$2e,$7a,$73,$61,$77,$32,$2e |
00FFF41F 02E |
00FFF420 02E063078064065034033 fcb $2e,$63,$78,$64,$65,$34,$33,$2e |
00FFF427 02E |
00FFF428 02E020076066074072035 fcb $2e,$20,$76,$66,$74,$72,$35,$2e |
00FFF42F 02E |
00FFF430 02E06E062068067079036 fcb $2e,$6e,$62,$68,$67,$79,$36,$2e |
00FFF437 02E |
00FFF438 02E02E06D06A075037038 fcb $2e,$2e,$6d,$6a,$75,$37,$38,$2e |
00FFF43F 02E |
00FFF440 02E02C06B06906F030039 fcb $2e,$2c,$6b,$69,$6f,$30,$39,$2e |
00FFF447 02E |
00FFF448 02E02E02F06C03B07002D fcb $2e,$2e,$2f,$6c,$3b,$70,$2d,$2e |
00FFF44F 02E |
00FFF450 02E02E02702E05B03D02E fcb $2e,$2e,$27,$2e,$5b,$3d,$2e,$2e |
00FFF457 02E |
00FFF458 0AD02E00D05D02E05C02E fcb $ad,$2e,$0d,$5d,$2e,$5c,$2e,$2e |
00FFF45F 02E |
00FFF460 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e |
00FFF467 02E |
00FFF468 02E09502E09309402E02E fcb $2e,$95,$2e,$93,$94,$2e,$2e,$2e |
00FFF46F 02E |
00FFF470 09807F09202E09109001B fcb $98,$7f,$92,$2e,$91,$90,$1b,$af |
00FFF477 0AF |
00FFF478 0AB02E09702E02E0960AE fcb $ab,$2e,$97,$2e,$2e,$96,$ae,$2e |
00FFF47F 02E |
00FFE580 02E0A902E0A50A30A10A2 fcb $2e,$a9,$2e,$a5,$a3,$a1,$a2,$ac |
00FFE587 0AC |
00FFE588 02E0AA0A80A60A4009060 fcb $2e,$aa,$a8,$a6,$a4,$09,$60,$2e |
00FFE58F 02E |
00FFE590 02E02E02E02E02E071031 fcb $2e,$2e,$2e,$2e,$2e,$71,$31,$2e |
00FFE597 02E |
00FFE598 02E02E07A073061077032 fcb $2e,$2e,$7a,$73,$61,$77,$32,$2e |
00FFE59F 02E |
00FFE5A0 02E063078064065034033 fcb $2e,$63,$78,$64,$65,$34,$33,$2e |
00FFE5A7 02E |
00FFE5A8 02E020076066074072035 fcb $2e,$20,$76,$66,$74,$72,$35,$2e |
00FFE5AF 02E |
00FFE5B0 02E06E062068067079036 fcb $2e,$6e,$62,$68,$67,$79,$36,$2e |
00FFE5B7 02E |
00FFE5B8 02E02E06D06A075037038 fcb $2e,$2e,$6d,$6a,$75,$37,$38,$2e |
00FFE5BF 02E |
00FFE5C0 02E02C06B06906F030039 fcb $2e,$2c,$6b,$69,$6f,$30,$39,$2e |
00FFE5C7 02E |
00FFE5C8 02E02E02F06C03B07002D fcb $2e,$2e,$2f,$6c,$3b,$70,$2d,$2e |
00FFE5CF 02E |
00FFE5D0 02E02E02702E05B03D02E fcb $2e,$2e,$27,$2e,$5b,$3d,$2e,$2e |
00FFE5D7 02E |
00FFE5D8 0AD02E00D05D02E05C02E fcb $ad,$2e,$0d,$5d,$2e,$5c,$2e,$2e |
00FFE5DF 02E |
00FFE5E0 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e |
00FFE5E7 02E |
00FFE5E8 02E09502E09309402E02E fcb $2e,$95,$2e,$93,$94,$2e,$2e,$2e |
00FFE5EF 02E |
00FFE5F0 09807F09202E09109001B fcb $98,$7f,$92,$2e,$91,$90,$1b,$af |
00FFE5F7 0AF |
00FFE5F8 0AB02E09702E02E0960AE fcb $ab,$2e,$97,$2e,$2e,$96,$ae,$2e |
00FFE5FF 02E |
|
00FFF480 02E02E02E0A702E02E02E fcb $2e,$2e,$2e,$a7,$2e,$2e,$2e,$2e |
00FFF487 02E |
00FFF488 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF48F 02E |
00FFF490 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF497 02E |
00FFF498 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF49F 02E |
00FFF4A0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4A7 02E |
00FFF4A8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4AF 02E |
00FFF4B0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4B7 02E |
00FFF4B8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4BF 02E |
00FFF4C0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4C7 02E |
00FFF4C8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4CF 02E |
00FFF4D0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4D7 02E |
00FFF4D8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4DF 02E |
00FFF4E0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4E7 02E |
00FFF4E8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4EF 02E |
00FFF4F0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF4F7 02E |
00FFF4F8 02E02E0FA02E02E02E02E fcb $2e,$2e,$fa,$2e,$2e,$2e,$2e,$2e |
00FFF4FF 02E |
00FFE600 02E02E02E0A702E02E02E fcb $2e,$2e,$2e,$a7,$2e,$2e,$2e,$2e |
00FFE607 02E |
00FFE608 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE60F 02E |
00FFE610 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE617 02E |
00FFE618 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE61F 02E |
00FFE620 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE627 02E |
00FFE628 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE62F 02E |
00FFE630 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE637 02E |
00FFE638 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE63F 02E |
00FFE640 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE647 02E |
00FFE648 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE64F 02E |
00FFE650 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE657 02E |
00FFE658 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE65F 02E |
00FFE660 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE667 02E |
00FFE668 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE66F 02E |
00FFE670 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE677 02E |
00FFE678 02E02E0FA02E02E02E02E fcb $2e,$2e,$fa,$2e,$2e,$2e,$2e,$2e |
00FFE67F 02E |
|
shiftedScanCodes: |
00FFF500 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF507 02E |
00FFF508 02E02E02E02E02E00907E fcb $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e |
00FFF50F 02E |
00FFF510 02E02E02E02E02E051021 fcb $2e,$2e,$2e,$2e,$2e,$51,$21,$2e |
00FFF517 02E |
00FFF518 02E02E05A053041057040 fcb $2e,$2e,$5a,$53,$41,$57,$40,$2e |
00FFF51F 02E |
00FFF520 02E043058044045024023 fcb $2e,$43,$58,$44,$45,$24,$23,$2e |
00FFF527 02E |
00FFF528 02E020056046054052025 fcb $2e,$20,$56,$46,$54,$52,$25,$2e |
00FFF52F 02E |
00FFF530 02E04E04204804705905E fcb $2e,$4e,$42,$48,$47,$59,$5e,$2e |
00FFF537 02E |
00FFF538 02E02E04D04A05502602A fcb $2e,$2e,$4d,$4a,$55,$26,$2a,$2e |
00FFF53F 02E |
00FFF540 02E03C04B04904F029028 fcb $2e,$3c,$4b,$49,$4f,$29,$28,$2e |
00FFF547 02E |
00FFF548 02E03E03F04C03A05005F fcb $2e,$3e,$3f,$4c,$3a,$50,$5f,$2e |
00FFF54F 02E |
00FFF550 02E02E02202E07B02B02E fcb $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e |
00FFF557 02E |
00FFF558 02E02E00D07D02E07C02E fcb $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e |
00FFF55F 02E |
00FFF560 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e |
00FFF567 02E |
00FFF568 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF56F 02E |
00FFF570 02E07F02E02E02E02E01B fcb $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e |
00FFF577 02E |
00FFF578 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF57F 02E |
00FFE680 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE687 02E |
00FFE688 02E02E02E02E02E00907E fcb $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e |
00FFE68F 02E |
00FFE690 02E02E02E02E02E051021 fcb $2e,$2e,$2e,$2e,$2e,$51,$21,$2e |
00FFE697 02E |
00FFE698 02E02E05A053041057040 fcb $2e,$2e,$5a,$53,$41,$57,$40,$2e |
00FFE69F 02E |
00FFE6A0 02E043058044045024023 fcb $2e,$43,$58,$44,$45,$24,$23,$2e |
00FFE6A7 02E |
00FFE6A8 02E020056046054052025 fcb $2e,$20,$56,$46,$54,$52,$25,$2e |
00FFE6AF 02E |
00FFE6B0 02E04E04204804705905E fcb $2e,$4e,$42,$48,$47,$59,$5e,$2e |
00FFE6B7 02E |
00FFE6B8 02E02E04D04A05502602A fcb $2e,$2e,$4d,$4a,$55,$26,$2a,$2e |
00FFE6BF 02E |
00FFE6C0 02E03C04B04904F029028 fcb $2e,$3c,$4b,$49,$4f,$29,$28,$2e |
00FFE6C7 02E |
00FFE6C8 02E03E03F04C03A05005F fcb $2e,$3e,$3f,$4c,$3a,$50,$5f,$2e |
00FFE6CF 02E |
00FFE6D0 02E02E02202E07B02B02E fcb $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e |
00FFE6D7 02E |
00FFE6D8 02E02E00D07D02E07C02E fcb $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e |
00FFE6DF 02E |
00FFE6E0 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e |
00FFE6E7 02E |
00FFE6E8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE6EF 02E |
00FFE6F0 02E07F02E02E02E02E01B fcb $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e |
00FFE6F7 02E |
00FFE6F8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE6FF 02E |
|
00FFF580 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF587 02E |
00FFF588 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF58F 02E |
00FFF590 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF597 02E |
00FFF598 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF59F 02E |
00FFF5A0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5A7 02E |
00FFF5A8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5AF 02E |
00FFF5B0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5B7 02E |
00FFF5B8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5BF 02E |
00FFF5C0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5C7 02E |
00FFF5C8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5CF 02E |
00FFF5D0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5D7 02E |
00FFF5D8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5DF 02E |
00FFF5E0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5E7 02E |
00FFF5E8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5EF 02E |
00FFF5F0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5F7 02E |
00FFF5F8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF5FF 02E |
00FFE700 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE707 02E |
00FFE708 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE70F 02E |
00FFE710 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE717 02E |
00FFE718 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE71F 02E |
00FFE720 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE727 02E |
00FFE728 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE72F 02E |
00FFE730 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE737 02E |
00FFE738 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE73F 02E |
00FFE740 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE747 02E |
00FFE748 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE74F 02E |
00FFE750 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE757 02E |
00FFE758 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE75F 02E |
00FFE760 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE767 02E |
00FFE768 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE76F 02E |
00FFE770 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE777 02E |
00FFE778 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE77F 02E |
|
; control |
keybdControlCodes: |
00FFF600 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF607 02E |
00FFF608 02E02E02E02E02E00907E fcb $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e |
00FFF60F 02E |
00FFF610 02E02E02E02E02E011021 fcb $2e,$2e,$2e,$2e,$2e,$11,$21,$2e |
00FFF617 02E |
00FFF618 02E02E01A013001017040 fcb $2e,$2e,$1a,$13,$01,$17,$40,$2e |
00FFF61F 02E |
00FFF620 02E003018004005024023 fcb $2e,$03,$18,$04,$05,$24,$23,$2e |
00FFF627 02E |
00FFF628 02E020016006014012025 fcb $2e,$20,$16,$06,$14,$12,$25,$2e |
00FFF62F 02E |
00FFF630 02E00E00200800701905E fcb $2e,$0e,$02,$08,$07,$19,$5e,$2e |
00FFF637 02E |
00FFF638 02E02E00D00A01502602A fcb $2e,$2e,$0d,$0a,$15,$26,$2a,$2e |
00FFF63F 02E |
00FFF640 02E03C00B00900F029028 fcb $2e,$3c,$0b,$09,$0f,$29,$28,$2e |
00FFF647 02E |
00FFF648 02E03E03F00C03A01005F fcb $2e,$3e,$3f,$0c,$3a,$10,$5f,$2e |
00FFF64F 02E |
00FFF650 02E02E02202E07B02B02E fcb $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e |
00FFF657 02E |
00FFF658 02E02E00D07D02E07C02E fcb $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e |
00FFF65F 02E |
00FFF660 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e |
00FFF667 02E |
00FFF668 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF66F 02E |
00FFF670 02E07F02E02E02E02E01B fcb $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e |
00FFF677 02E |
00FFF678 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF67F 02E |
00FFE780 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE787 02E |
00FFE788 02E02E02E02E02E00907E fcb $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e |
00FFE78F 02E |
00FFE790 02E02E02E02E02E011021 fcb $2e,$2e,$2e,$2e,$2e,$11,$21,$2e |
00FFE797 02E |
00FFE798 02E02E01A013001017040 fcb $2e,$2e,$1a,$13,$01,$17,$40,$2e |
00FFE79F 02E |
00FFE7A0 02E003018004005024023 fcb $2e,$03,$18,$04,$05,$24,$23,$2e |
00FFE7A7 02E |
00FFE7A8 02E020016006014012025 fcb $2e,$20,$16,$06,$14,$12,$25,$2e |
00FFE7AF 02E |
00FFE7B0 02E00E00200800701905E fcb $2e,$0e,$02,$08,$07,$19,$5e,$2e |
00FFE7B7 02E |
00FFE7B8 02E02E00D00A01502602A fcb $2e,$2e,$0d,$0a,$15,$26,$2a,$2e |
00FFE7BF 02E |
00FFE7C0 02E03C00B00900F029028 fcb $2e,$3c,$0b,$09,$0f,$29,$28,$2e |
00FFE7C7 02E |
00FFE7C8 02E03E03F00C03A01005F fcb $2e,$3e,$3f,$0c,$3a,$10,$5f,$2e |
00FFE7CF 02E |
00FFE7D0 02E02E02202E07B02B02E fcb $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e |
00FFE7D7 02E |
00FFE7D8 02E02E00D07D02E07C02E fcb $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e |
00FFE7DF 02E |
00FFE7E0 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e |
00FFE7E7 02E |
00FFE7E8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE7EF 02E |
00FFE7F0 02E07F02E02E02E02E01B fcb $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e |
00FFE7F7 02E |
00FFE7F8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE7FF 02E |
|
keybdExtendedCodes: |
00FFF680 02E02E02E02E0A30A10A2 fcb $2e,$2e,$2e,$2e,$a3,$a1,$a2,$2e |
00FFF687 02E |
00FFF688 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF68F 02E |
00FFF690 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF697 02E |
00FFF698 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF69F 02E |
00FFF6A0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6A7 02E |
00FFF6A8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6AF 02E |
00FFF6B0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6B7 02E |
00FFF6B8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6BF 02E |
00FFF6C0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6C7 02E |
00FFF6C8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6CF 02E |
00FFF6D0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6D7 02E |
00FFF6D8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6DF 02E |
00FFF6E0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFF6E7 02E |
00FFF6E8 02E09502E09309402E02E fcb $2e,$95,$2e,$93,$94,$2e,$2e,$2e |
00FFF6EF 02E |
00FFF6F0 09809909202E09109002E fcb $98,$99,$92,$2e,$91,$90,$2e,$2e |
00FFF6F7 02E |
00FFF6F8 02E02E09702E02E09602E fcb $2e,$2e,$97,$2e,$2e,$96,$2e,$2e |
00FFF6FF 02E |
00FFE800 02E02E02E02E0A30A10A2 fcb $2e,$2e,$2e,$2e,$a3,$a1,$a2,$2e |
00FFE807 02E |
00FFE808 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE80F 02E |
00FFE810 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE817 02E |
00FFE818 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE81F 02E |
00FFE820 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE827 02E |
00FFE828 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE82F 02E |
00FFE830 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE837 02E |
00FFE838 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE83F 02E |
00FFE840 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE847 02E |
00FFE848 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE84F 02E |
00FFE850 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE857 02E |
00FFE858 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE85F 02E |
00FFE860 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e |
00FFE867 02E |
00FFE868 02E09502E09309402E02E fcb $2e,$95,$2e,$93,$94,$2e,$2e,$2e |
00FFE86F 02E |
00FFE870 09809909202E09109002E fcb $98,$99,$92,$2e,$91,$90,$2e,$2e |
00FFE877 02E |
00FFE878 02E02E09702E02E09602E fcb $2e,$2e,$97,$2e,$2e,$96,$2e,$2e |
00FFE87F 02E |
|
; ============================================================================ |
; __ |
1230,20 → 1664,20
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdRecvByte: |
00FFF700 034010 pshs x |
00FFF702 08E000064 ldx #100 ; wait up to 1s |
00FFE880 034010 pshs x |
00FFE882 08E000064 ldx #100 ; wait up to 1s |
krb3: |
00FFF705 08D05A bsr KeybdGetStatus ; wait for response from keyboard |
00FFF707 05D tstb |
00FFF708 02B00B bmi krb4 ; is input buffer full ? yes, branch |
00FFF70A 08D02D bsr Wait10ms ; wait a bit |
00FFF70C 0301FF leax -1,x |
00FFF70E 026FF5 bne krb3 ; go back and try again |
00FFF710 0CCFFFFFF ldd #-1 ; return -1 |
00FFF713 035090 puls x,pc |
00FFE885 08D05A bsr KeybdGetStatus ; wait for response from keyboard |
00FFE887 05D tstb |
00FFE888 02B00B bmi krb4 ; is input buffer full ? yes, branch |
00FFE88A 08D02D bsr Wait10ms ; wait a bit |
00FFE88C 0301FF dex |
00FFE88E 026FF5 bne krb3 ; go back and try again |
00FFE890 0CCFFFFFF ldd #-1 ; return -1 |
00FFE893 035090 puls x,pc |
krb4: |
00FFF715 08D066 bsr KeybdGetScancode |
00FFF717 035090 puls x,pc |
00FFE895 08D066 bsr KeybdGetScancode |
00FFE897 035090 puls x,pc |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Send a byte to the keyboard. |
1255,8 → 1689,8
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdSendByte: |
00FFF719 0150F7FFFE30400 stb KEYBD |
00FFF71E 039 rts |
00FFE899 0150F7FFFE30400 stb KEYBD |
00FFE89E 039 rts |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Wait until the keyboard transmit is complete |
1268,21 → 1702,21
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdWaitTx: |
00FFF71F 034010 pshs x |
00FFF721 08E000064 ldx #100 ; wait a max of 1s |
00FFE89F 034010 pshs x |
00FFE8A1 08E000064 ldx #100 ; wait a max of 1s |
kwt1: |
00FFF724 08D03B bsr KeybdGetStatus |
00FFF726 0C4040 andb #$40 ; check for transmit complete bit; branch if bit set |
00FFF728 02600B bne kwt2 |
00FFF72A 08D00D bsr Wait10ms ; delay a little bit |
00FFF72C 0301FF leax -1,x |
00FFF72E 026FF4 bne kwt1 ; go back and try again |
00FFF730 0CCFFFFFF ldd #-1 ; timed out, return -1 |
00FFF733 035090 puls x,pc |
00FFE8A4 08D03B bsr KeybdGetStatus |
00FFE8A6 0C4040 andb #$40 ; check for transmit complete bit; branch if bit set |
00FFE8A8 02600B bne kwt2 |
00FFE8AA 08D00D bsr Wait10ms ; delay a little bit |
00FFE8AC 0301FF dex |
00FFE8AE 026FF4 bne kwt1 ; go back and try again |
00FFE8B0 0CCFFFFFF ldd #-1 ; timed out, return -1 |
00FFE8B3 035090 puls x,pc |
kwt2: |
00FFF735 04F clra ; wait complete, return 0 |
00FFF736 05F clrb |
00FFF737 035090 puls x,pc |
00FFE8B5 04F clra ; wait complete, return 0 |
00FFE8B6 05F clrb |
00FFE8B7 035090 puls x,pc |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Wait for 10 ms |
1294,14 → 1728,14
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
Wait10ms: |
00FFF739 034006 pshs d |
00FFF73B 0150B6FFFFFFFE7 lda MSCOUNT+3 |
00FFE8B9 034006 pshs d |
00FFE8BB 0150B6FFFFFFFE7 lda MSCOUNT+3 |
W10_0001: |
00FFF740 01F089 tfr a,b |
00FFF742 0150F0FFFFFFFE7 subb MSCOUNT+3 |
00FFF747 0C1FFA cmpb #$FFA |
00FFF749 022FF5 bhi W10_0001 |
00FFF74B 035086 puls d,pc |
00FFE8C0 01F089 tfr a,b |
00FFE8C2 0150F0FFFFFFFE7 subb MSCOUNT+3 |
00FFE8C7 0C1FFA cmpb #$FFA |
00FFE8C9 022FF5 bhi W10_0001 |
00FFE8CB 035086 puls d,pc |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Wait for 300 ms (256 ms) |
1313,14 → 1747,14
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
Wait300ms: |
00FFF74D 034006 pshs d |
00FFF74F 0150B6FFFFFFFE7 lda MSCOUNT+3 |
00FFE8CD 034006 pshs d |
00FFE8CF 0150B6FFFFFFFE7 lda MSCOUNT+3 |
W300_0001: |
00FFF754 01F089 tfr a,b |
00FFF756 0150F0FFFFFFFE7 subb MSCOUNT+3 |
00FFF75B 0C1F00 cmpb #$F00 |
00FFF75D 022FF5 bhi W300_0001 |
00FFF75F 035086 puls d,pc |
00FFE8D4 01F089 tfr a,b |
00FFE8D6 0150F0FFFFFFFE7 subb MSCOUNT+3 |
00FFE8DB 0C1F00 cmpb #$F00 |
00FFE8DD 022FF5 bhi W300_0001 |
00FFE8DF 035086 puls d,pc |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Get the keyboard status |
1331,22 → 1765,22
|
KeybdGetStatus: |
kbgs3: |
00FFF761 0150F6FFFE30401 ldb KEYBD+1 |
00FFF766 0C5080 bitb #$80 |
00FFF768 02600E bne kbgs1 |
00FFF76A 0C5001 bitb #$01 ; check parity error flag |
00FFF76C 026002 bne kbgs2 |
00FFF76E 04F clra |
00FFF76F 039 rts |
00FFE8E1 0150F6FFFE30401 ldb KEYBD+1 |
00FFE8E6 0C5080 bitb #$80 |
00FFE8E8 02600E bne kbgs1 |
00FFE8EA 0C5001 bitb #$01 ; check parity error flag |
00FFE8EC 026002 bne kbgs2 |
00FFE8EE 04F clra |
00FFE8EF 039 rts |
kbgs2: |
00FFF770 0C60FE ldb #$FE ; request resend |
00FFF772 08DFA5 bsr KeybdSendByte |
00FFF774 08DFA9 bsr KeybdWaitTx |
00FFF776 020FE9 bra kbgs3 |
00FFE8F0 0C60FE ldb #$FE ; request resend |
00FFE8F2 08DFA5 bsr KeybdSendByte |
00FFE8F4 08DFA9 bsr KeybdWaitTx |
00FFE8F6 020FE9 bra kbgs3 |
kbgs1: ; return negative status |
00FFF778 0CAF00 orb #$F00 |
00FFF77A 086FFF lda #-1 |
00FFF77C 039 rts |
00FFE8F8 0CAF00 orb #$F00 |
00FFE8FA 086FFF lda #-1 |
00FFE8FC 039 rts |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Get the scancode from the keyboard port |
1356,16 → 1790,10
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdGetScancode: |
00FFF77D 04F clra |
00FFF77E 0150F6FFFE30400 ldb KEYBD ; get the scan code |
00FFF783 01507FFFFE30401 clr KEYBD+1 ; clear receive register (write $00 to status reg) |
; The following useful during debug. |
; lbsr DispByteAsHex |
; pshs b |
; ldb #' ' |
; lbsr OUTCH |
; puls b |
00FFF788 039 rts |
00FFE8FD 04F clra |
00FFE8FE 0150F6FFFE30400 ldb KEYBD ; get the scan code |
00FFE903 01507FFFFE30401 clr KEYBD+1 ; clear receive register (write $00 to status reg) |
00FFE908 039 rts |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Set the LEDs on the keyboard. |
1377,16 → 1805,16
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdSetLED: |
00FFF789 034004 pshs b |
00FFF78B 0C60ED ldb #$ED ; set LEDs command |
00FFF78D 08DF8A bsr KeybdSendByte |
00FFF78F 08DF8E bsr KeybdWaitTx |
00FFF791 08DF6D bsr KeybdRecvByte ; should be an ack |
00FFF793 035004 puls b |
00FFF795 08DF82 bsr KeybdSendByte |
00FFF797 08DF86 bsr KeybdWaitTx |
00FFF799 08DF65 bsr KeybdRecvByte ; should be an ack |
00FFF79B 039 rts |
00FFE909 034004 pshs b |
00FFE90B 0C60ED ldb #$ED ; set LEDs command |
00FFE90D 08DF8A bsr KeybdSendByte |
00FFE90F 08DF8E bsr KeybdWaitTx |
00FFE911 08DF6D bsr KeybdRecvByte ; should be an ack |
00FFE913 035004 puls b |
00FFE915 08DF82 bsr KeybdSendByte |
00FFE917 08DF86 bsr KeybdWaitTx |
00FFE919 08DF65 bsr KeybdRecvByte ; should be an ack |
00FFE91B 039 rts |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Get ID - get the keyboards identifier code. |
1398,27 → 1826,27
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdGetID: |
00FFF79C 0C60F2 ldb #$F2 |
00FFF79E 08DF79 bsr KeybdSendByte |
00FFF7A0 08DF7D bsr KeybdWaitTx |
00FFF7A2 08DF5C bsr KeybdRecvByte |
00FFF7A4 0C5080 bitb #$80 |
00FFF7A6 026014 bne kgnotKbd |
00FFF7A8 0C10AB cmpb #$AB |
00FFF7AA 026010 bne kgnotKbd |
00FFF7AC 08DF52 bsr KeybdRecvByte |
00FFF7AE 0C5080 bitb #$80 |
00FFF7B0 02600A bne kgnotKbd |
00FFF7B2 0C1083 cmpb #$83 |
00FFF7B4 026006 bne kgnotKbd |
00FFF7B6 0CC00AB83 ldd #$AB83 |
00FFE91C 0C60F2 ldb #$F2 |
00FFE91E 08DF79 bsr KeybdSendByte |
00FFE920 08DF7D bsr KeybdWaitTx |
00FFE922 08DF5C bsr KeybdRecvByte |
00FFE924 0C5080 bitb #$80 |
00FFE926 026014 bne kgnotKbd |
00FFE928 0C10AB cmpb #$AB |
00FFE92A 026010 bne kgnotKbd |
00FFE92C 08DF52 bsr KeybdRecvByte |
00FFE92E 0C5080 bitb #$80 |
00FFE930 02600A bne kgnotKbd |
00FFE932 0C1083 cmpb #$83 |
00FFE934 026006 bne kgnotKbd |
00FFE936 0CC00AB83 ldd #$AB83 |
kgid1: |
00FFF7B9 0DD124 std KeybdID |
00FFF7BB 039 rts |
00FFE939 0DD124 std KeybdID |
00FFE93B 039 rts |
kgnotKbd: |
00FFF7BC 04F clra |
00FFF7BD 05F clrb |
00FFF7BE 020FF9 bra kgid1 |
00FFE93C 04F clra |
00FFE93D 05F clrb |
00FFE93E 020FF9 bra kgid1 |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Initialize the keyboard. |
1432,75 → 1860,135
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdInit: |
00FFF7C0 034026 pshs d,y |
00FFF7C2 18E000005 ldy #5 |
00FFE940 034026 pshs d,y |
00FFE942 18E000005 ldy #5 |
00FFE945 00F120 clr KeyState1 ; records key up/down state |
00FFE947 00F121 clr KeyState2 ; records shift,ctrl,alt state |
kbdi0002: |
00FFF7C5 08DF72 bsr Wait10ms |
00FFF7C7 01507FFFFE30401 clr KEYBD+1 ; clear receive register (write $00 to status reg) |
00FFF7CC 0C6FFF ldb #-1 ; send reset code to keyboard |
00FFF7CE 0150F7FFFE30401 stb KEYBD+1 ; write $FF to status reg to clear TX state |
00FFF7D3 08DF44 bsr KeybdSendByte ; now write to transmit register |
00FFF7D5 08DF48 bsr KeybdWaitTx ; wait until no longer busy |
00FFF7D7 08DF27 bsr KeybdRecvByte ; look for an ACK ($FA) |
00FFF7D9 0C10FA cmpb #$FA |
00FFF7DB 026021 bne kbdiTryAgain |
00FFF7DD 08DF21 bsr KeybdRecvByte ; look for BAT completion code ($AA) |
00FFF7DF 0C10FC cmpb #$FC ; reset error ? |
00FFF7E1 02701B beq kbdiTryAgain |
00FFF7E3 0C10AA cmpb #$AA ; reset complete okay ? |
00FFF7E5 026017 bne kbdiTryAgain |
00FFE949 08DF6E bsr Wait10ms |
00FFE94B 01507FFFFE30401 clr KEYBD+1 ; clear receive register (write $00 to status reg) |
00FFE950 0C6FFF ldb #-1 ; send reset code to keyboard |
00FFE952 0150F7FFFE30401 stb KEYBD+1 ; write $FF to status reg to clear TX state |
00FFE957 08DF40 bsr KeybdSendByte ; now write to transmit register |
00FFE959 08DF44 bsr KeybdWaitTx ; wait until no longer busy |
00FFE95B 08DF23 bsr KeybdRecvByte ; look for an ACK ($FA) |
00FFE95D 0C10FA cmpb #$FA |
00FFE95F 026021 bne kbdiTryAgain |
00FFE961 08DF1D bsr KeybdRecvByte ; look for BAT completion code ($AA) |
00FFE963 0C10FC cmpb #$FC ; reset error ? |
00FFE965 02701B beq kbdiTryAgain |
00FFE967 0C10AA cmpb #$AA ; reset complete okay ? |
00FFE969 026017 bne kbdiTryAgain |
|
; After a reset, scan code set #2 should be active |
.config: |
00FFF7E7 0C60F0 ldb #$F0 ; send scan code select |
00FFF7E9 0150F7FFFE60000 stb LEDS |
00FFF7EE 08DF29 bsr KeybdSendByte |
00FFF7F0 08DF2D bsr KeybdWaitTx |
00FFF7F2 05D tstb |
00FFF7F3 02B009 bmi kbdiTryAgain |
00FFF7F5 08DF09 bsr KeybdRecvByte ; wait for response from keyboard |
00FFF7F7 04D tsta |
00FFF7F8 02B004 bmi kbdiTryAgain |
00FFF7FA 0C10FA cmpb #$FA ; ACK |
00FFF7FC 02700C beq kbdi0004 |
00FFE96B 0C60F0 ldb #$F0 ; send scan code select |
00FFE96D 0150F7FFFE60001 stb LEDS |
00FFE972 08DF25 bsr KeybdSendByte |
00FFE974 08DF29 bsr KeybdWaitTx |
00FFE976 05D tstb |
00FFE977 02B009 bmi kbdiTryAgain |
00FFE979 08DF05 bsr KeybdRecvByte ; wait for response from keyboard |
00FFE97B 04D tsta |
00FFE97C 02B004 bmi kbdiTryAgain |
00FFE97E 0C10FA cmpb #$FA ; ACK |
00FFE980 02700C beq kbdi0004 |
kbdiTryAgain: |
00FFF7FE 0313FF dey |
00FFF800 026FC3 bne kbdi0002 |
00FFE982 0313FF dey |
00FFE984 026FC3 bne kbdi0002 |
.keybdErr: |
00FFF802 0CCFFF82A ldd #msgBadKeybd |
00FFF805 017FFFB5A lbsr DisplayStringCRLF |
00FFE986 0CCFFE9AE ldd #msgBadKeybd |
00FFE989 017FFFA2D lbsr DisplayStringCRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFF808 020014 bra ledxit |
00FFE98C 020014 bra ledxit |
kbdi0004: |
00FFF80A 0C6002 ldb #2 ; select scan code set #2 |
00FFF80C 08DF0B bsr KeybdSendByte |
00FFF80E 08DF0F bsr KeybdWaitTx |
00FFF810 05D tstb |
00FFF811 02BFEB bmi kbdiTryAgain |
00FFF813 08DEEB bsr KeybdRecvByte ; wait for response from keyboard |
00FFF815 04D tsta |
00FFF816 02BFE6 bmi kbdiTryAgain |
00FFF818 0C10FA cmpb #$FA |
00FFF81A 026FE2 bne kbdiTryAgain |
00FFF81C 08DF7E bsr KeybdGetID |
00FFE98E 0C6002 ldb #2 ; select scan code set #2 |
00FFE990 08DF07 bsr KeybdSendByte |
00FFE992 08DF0B bsr KeybdWaitTx |
00FFE994 05D tstb |
00FFE995 02BFEB bmi kbdiTryAgain |
00FFE997 08DEE7 bsr KeybdRecvByte ; wait for response from keyboard |
00FFE999 04D tsta |
00FFE99A 02BFE6 bmi kbdiTryAgain |
00FFE99C 0C10FA cmpb #$FA |
00FFE99E 026FE2 bne kbdiTryAgain |
00FFE9A0 08DF7A bsr KeybdGetID |
ledxit: |
00FFF81E 0C6007 ldb #$07 |
00FFF820 08DF67 bsr KeybdSetLED |
00FFF822 08DF29 bsr Wait300ms |
00FFF824 0C6000 ldb #$00 |
00FFF826 08DF61 bsr KeybdSetLED |
00FFF828 0350A6 puls d,y,pc |
00FFE9A2 0C6007 ldb #$07 |
00FFE9A4 08DF63 bsr KeybdSetLED |
00FFE9A6 08DF25 bsr Wait300ms |
00FFE9A8 0C6000 ldb #$00 |
00FFE9AA 08DF5D bsr KeybdSetLED |
00FFE9AC 0350A6 puls d,y,pc |
|
msgBadKeybd: |
00FFF82A 04B06507906206F061072 fcb "Keyboard error",0 |
00FFF831 06402006507207206F072 |
00FFF838 000 |
00FFE9AE 04B06507906206F061072 fcb "Keyboard error",0 |
00FFE9B5 06402006507207206F072 |
00FFE9BC 000 |
|
;------------------------------------------------------------------------------ |
; Calculate number of character in input buffer |
; |
; Parameters: |
; y = $Cn00000 where n is core id |
; Returns: |
; d = number of bytes in buffer. |
;------------------------------------------------------------------------------ |
|
kbdRcvCount: |
00FFE9BD 04F clra |
00FFE9BE 0E6A08128 ldb kbdTailRcv,y |
00FFE9C1 0E0A08127 subb kbdHeadRcv,y |
00FFE9C4 02C008 bge krcXit |
00FFE9C6 0C6040 ldb #$40 |
00FFE9C8 0E0A08127 subb kbdHeadRcv,y |
00FFE9CB 0EBA08128 addb kbdTailRcv,y |
krcXit: |
00FFE9CE 039 rts |
|
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
KeybdIRQ: |
00FFE9CF 0150B6FFFE30401 lda KEYBD+1 ; check status |
00FFE9D4 085080 bita #$80 ; was key pressed? |
00FFE9D6 027034 beq notKbdIRQ ; if not, exit |
00FFE9D8 0150F6FFFE30400 ldb KEYBD ; get the scan code |
00FFE9DD 01507FFFFE30401 clr KEYBD+1 ; clear receive register (write $00 to status reg) |
00FFE9E2 034004 pshs b ; save it off |
00FFE9E4 0B6FF0010 lda IOFocusID ; compute core memory address $Cn0000 |
00FFE9E7 05F clrb |
00FFE9E8 048 asla |
00FFE9E9 048 asla |
00FFE9EA 048 asla |
00FFE9EB 048 asla |
00FFE9EC 08AC00 ora #$C00 ; address $Cn0000 |
00FFE9EE 01F002 tfr d,y ; y = |
00FFE9F0 08DFCB bsr kbdRcvCount ; get count of scan codes in buffer |
00FFE9F2 0C1040 cmpb #64 ; check if buffer full? |
00FFE9F4 024017 bhs kbdBufFull ; if buffer full, ignore new keystroke |
00FFE9F6 01F021 tfr y,x ; compute fifo address |
00FFE9F8 0E6A08128 ldb kbdTailRcv,y ; b = buffer index |
00FFE9FB 035002 puls a ; get back scancode |
00FFE9FD 030040 leax kbdFifo,x ; x = base address for fifo |
00FFE9FF 0A7845 sta b,x ; store in buffer |
00FFEA01 05C incb ; increment buffer index |
00FFEA02 0C403F andb #$3f ; wrap around at 64 chars |
00FFEA04 0E7A08128 stb kbdTailRcv,y ; update it |
00FFEA07 08601C lda #28 ; Keyboard is IRQ #28 |
00FFEA09 0B7FF0011 sta IrqSource ; stuff a byte indicating the IRQ source for PEEK() |
notKbdIRQ: |
00FFEA0C 039 rts |
kbdBufFull: |
00FFEA0D 032601 leas 1,s ; get rid of saved scancode |
00FFEA0F 039 rts |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
DBGCheckForKey: |
00FFF839 020F26 bra KeybdGetStatus |
00FFEA10 020ECF bra KeybdGetStatus |
|
|
; KeyState2 variable bit meanings |
1519,237 → 2007,642
; +-------- = extended |
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
; Debug versison of keyboard get routine. |
; Keyboard get routine. |
; |
; The routine may get characters directly from the scancode input or less |
; directly from the scancode buffer, if things are interrupt driven. |
; |
; Parameters: |
; b: 0 = non blocking, otherwise blocking |
; b: bit 11 = blocking status 1=blocking, 0=non blocking |
; b: bit 1 = scancode source 1=scancode buffer, 0=direct |
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
DBGGetKey: |
00FFF83B 034010 pshs x |
GetKey: |
00FFEA12 034030 pshs x,y |
00FFEA14 0D7126 stb KeybdBlock ; save off blocking status |
dbgk2: |
00FFF83D 034004 pshs b |
00FFF83F 08DF20 bsr KeybdGetStatus |
00FFF841 0C4080 andb #$80 ; is key available? |
00FFF843 035004 puls b |
00FFF845 026008 bne dbgk1 ; branch if key |
00FFF847 05D tstb ; block? |
00FFF848 026FF3 bne dbgk2 ; If no key and blocking - loop |
00FFF84A 0CCFFFFFF ldd #-1 ; return -1 if no block and no key |
00FFF84D 035090 puls x,pc |
00FFEA16 0D6126 ldb KeybdBlock |
00FFEA18 034004 pshs b |
00FFEA1A 0C5001 bitb #1 ; what is the scancode source |
00FFEA1C 02701A beq dbgk20 ; branch if direct read |
00FFEA1E 0150B6FFFFFFFE0 lda COREID ; compute core memory address |
00FFEA23 05F clrb |
00FFEA24 048 asla |
00FFEA25 048 asla |
00FFEA26 048 asla |
00FFEA27 048 asla |
00FFEA28 08AC00 ora #$C00 |
00FFEA2A 01F002 tfr d,y ; y = $Cn0000 |
00FFEA2C 08DF8F bsr kbdRcvCount |
00FFEA2E 05D tstb ; anything in buffer? |
00FFEA2F 035004 puls b |
00FFEA31 026018 bne dbgk1 ; branch if something in buffer |
00FFEA33 05D tstb |
00FFEA34 02BFE0 bmi dbgk2 ; if no key and blocking - loop |
00FFEA36 02000E bra dbgk24 |
dbgk20: |
00FFEA38 18E000000 ldy #0 |
00FFEA3B 08DEA4 bsr KeybdGetStatus |
00FFEA3D 0C4080 andb #$80 ; is key available? |
00FFEA3F 035004 puls b |
00FFEA41 026008 bne dbgk1 ; branch if key |
00FFEA43 05D tstb ; block? |
00FFEA44 02BFD0 bmi dbgk2 ; If no key and blocking - loop |
dbgk24: |
00FFEA46 0CCFFFFFF ldd #-1 ; return -1 if no block and no key |
00FFEA49 0350B0 puls x,y,pc |
dbgk1: |
00FFF84F 08DF2C bsr KeybdGetScancode |
00FFEA4B 18C000000 cmpy #0 |
00FFEA4E 026004 bne dbgk22 |
00FFEA50 08DEAB bsr KeybdGetScancode ; get scancode directly |
00FFEA52 020011 bra dbgk23 |
dbgk22: |
; Retrieve value from scancode buffer |
00FFEA54 01F021 tfr y,x |
00FFEA56 030040 leax kbdFifo,x ; x = fifo address |
00FFEA58 0E6A08127 ldb kbdHeadRcv,y ; b = buffer index |
00FFEA5B 0A6A0D lda b,x ; get the scancode |
00FFEA5D 05C incb ; increment fifo index |
00FFEA5E 0C403F andb #$3f ; and wrap around |
00FFEA60 0E7A08127 stb kbdHeadRcv,y ; save it back |
00FFEA63 01F089 tfr a,b ; the scancode is needed in accb |
dbgk23: |
; lbsr DispByteAsHex |
; Make sure there is a small delay between scancode reads |
00FFF851 08E000014 ldx #20 |
00FFEA65 08E000014 ldx #20 |
dbgk3: |
00FFF854 0301FF dex |
00FFF856 026FFC bne dbgk3 |
00FFEA68 0301FF dex |
00FFEA6A 026FFC bne dbgk3 |
; switch on scan code |
00FFF858 0C10F0 cmpb #SC_KEYUP |
00FFF85A 026006 bne dbgk4 |
00FFF85C 00F120 clr KeyState1 ; make KeyState1 = -1 |
00FFF85E 000120 neg KeyState1 |
00FFF860 020FDB bra dbgk2 ; loop back |
00FFEA6C 0C10F0 cmpb #SC_KEYUP |
00FFEA6E 026004 bne dbgk4 |
00FFEA70 0D7120 stb KeyState1 ; make KeyState1 <> 0 |
00FFEA72 020FA2 bra dbgk2 ; loop back |
dbgk4: |
00FFF862 0C10E0 cmpb #SC_EXTEND |
00FFF864 026008 bne dbgk5 |
00FFF866 096121 lda KeyState2 |
00FFF868 08A800 ora #$800 |
00FFF86A 097121 sta KeyState2 |
00FFF86C 020FCF bra dbgk2 |
00FFEA74 0C10E0 cmpb #SC_EXTEND |
00FFEA76 026008 bne dbgk5 |
00FFEA78 096121 lda KeyState2 |
00FFEA7A 08A800 ora #$800 |
00FFEA7C 097121 sta KeyState2 |
00FFEA7E 020F96 bra dbgk2 |
dbgk5: |
00FFF86E 0C1014 cmpb #SC_CTRL |
00FFF870 026016 bne dbgkNotCtrl |
00FFF872 00D120 tst KeyState1 |
00FFF874 02B008 bmi dbgk7 |
00FFF876 096121 lda KeyState2 |
00FFF878 08A004 ora #4 |
00FFF87A 097121 sta KeyState2 |
00FFF87C 020006 bra dbgk8 |
00FFEA80 0C1014 cmpb #SC_CTRL |
00FFEA82 026016 bne dbgkNotCtrl |
00FFEA84 00D120 tst KeyState1 |
00FFEA86 026008 bne dbgk7 |
00FFEA88 096121 lda KeyState2 |
00FFEA8A 08A004 ora #4 |
00FFEA8C 097121 sta KeyState2 |
00FFEA8E 020006 bra dbgk8 |
dbgk7: |
00FFF87E 096121 lda KeyState2 |
00FFF880 084FFB anda #~4 |
00FFF882 097121 sta KeyState2 |
00FFEA90 096121 lda KeyState2 |
00FFEA92 084FFB anda #~4 |
00FFEA94 097121 sta KeyState2 |
dbgk8: |
00FFF884 00F120 clr KeyState1 |
00FFF886 020FB5 bra dbgk2 |
00FFEA96 00F120 clr KeyState1 |
00FFEA98 020F7C bra dbgk2 |
dbgkNotCtrl: |
00FFF888 0C1059 cmpb #SC_RSHIFT |
00FFF88A 026016 bne dbgkNotRshift |
00FFF88C 00D120 tst KeyState1 |
00FFF88E 02B008 bmi dbgk9 |
00FFF890 096121 lda KeyState2 |
00FFF892 08A001 ora #1 |
00FFF894 097121 sta KeyState2 |
00FFF896 020006 bra dbgk10 |
00FFEA9A 0C1059 cmpb #SC_RSHIFT |
00FFEA9C 026016 bne dbgkNotRshift |
00FFEA9E 00D120 tst KeyState1 |
00FFEAA0 026008 bne dbgk9 |
00FFEAA2 096121 lda KeyState2 |
00FFEAA4 08A001 ora #1 |
00FFEAA6 097121 sta KeyState2 |
00FFEAA8 020006 bra dbgk10 |
dbgk9: |
00FFF898 096121 lda KeyState2 |
00FFF89A 084FFE anda #~1 |
00FFF89C 097121 sta KeyState2 |
00FFEAAA 096121 lda KeyState2 |
00FFEAAC 084FFE anda #~1 |
00FFEAAE 097121 sta KeyState2 |
dbgk10: |
00FFF89E 00F120 clr KeyState1 |
00FFF8A0 020F9B bra dbgk2 |
00FFEAB0 00F120 clr KeyState1 |
00FFEAB2 020F62 bra dbgk2 |
dbgkNotRshift: |
00FFF8A2 0C1077 cmpb #SC_NUMLOCK |
00FFF8A4 026013 bne dbgkNotNumlock |
00FFF8A6 096121 lda KeyState2 |
00FFF8A8 088010 eora #16 |
00FFF8AA 097121 sta KeyState2 |
00FFF8AC 096122 lda KeyLED |
00FFF8AE 088002 eora #2 |
00FFF8B0 097122 sta KeyLED |
00FFF8B2 01F089 tfr a,b |
00FFF8B4 04F clra |
00FFF8B5 08DED2 bsr KeybdSetLED |
00FFF8B7 020F84 bra dbgk2 |
00FFEAB4 0C1077 cmpb #SC_NUMLOCK |
00FFEAB6 026013 bne dbgkNotNumlock |
00FFEAB8 096121 lda KeyState2 |
00FFEABA 088010 eora #16 |
00FFEABC 097121 sta KeyState2 |
00FFEABE 096122 lda KeyLED |
00FFEAC0 088002 eora #2 |
00FFEAC2 097122 sta KeyLED |
00FFEAC4 01F089 tfr a,b |
00FFEAC6 04F clra |
00FFEAC7 08DE40 bsr KeybdSetLED |
00FFEAC9 020F4B bra dbgk2 |
dbgkNotNumlock: |
00FFF8B9 0C1058 cmpb #SC_CAPSLOCK |
00FFF8BB 026013 bne dbgkNotCapslock |
00FFF8BD 096121 lda KeyState2 |
00FFF8BF 088020 eora #32 |
00FFF8C1 097121 sta KeyState2 |
00FFF8C3 096122 lda KeyLED |
00FFF8C5 088004 eora #4 |
00FFF8C7 097122 sta KeyLED |
00FFF8C9 01F089 tfr a,b |
00FFF8CB 04F clra |
00FFF8CC 08DEBB bsr KeybdSetLED |
00FFF8CE 020F6D bra dbgk2 |
00FFEACB 0C1058 cmpb #SC_CAPSLOCK |
00FFEACD 026013 bne dbgkNotCapslock |
00FFEACF 096121 lda KeyState2 |
00FFEAD1 088020 eora #32 |
00FFEAD3 097121 sta KeyState2 |
00FFEAD5 096122 lda KeyLED |
00FFEAD7 088004 eora #4 |
00FFEAD9 097122 sta KeyLED |
00FFEADB 01F089 tfr a,b |
00FFEADD 04F clra |
00FFEADE 08DE29 bsr KeybdSetLED |
00FFEAE0 020F34 bra dbgk2 |
dbgkNotCapslock: |
00FFF8D0 0C107E cmpb #SC_SCROLLLOCK |
00FFF8D2 026013 bne dbgkNotScrolllock |
00FFF8D4 096121 lda KeyState2 |
00FFF8D6 088040 eora #64 |
00FFF8D8 097121 sta KeyState2 |
00FFF8DA 096122 lda KeyLED |
00FFF8DC 088001 eora #1 |
00FFF8DE 097122 sta KeyLED |
00FFF8E0 01F089 tfr a,b |
00FFF8E2 04F clra |
00FFF8E3 08DEA4 bsr KeybdSetLED |
00FFF8E5 020F56 bra dbgk2 |
00FFEAE2 0C107E cmpb #SC_SCROLLLOCK |
00FFEAE4 026013 bne dbgkNotScrolllock |
00FFEAE6 096121 lda KeyState2 |
00FFEAE8 088040 eora #64 |
00FFEAEA 097121 sta KeyState2 |
00FFEAEC 096122 lda KeyLED |
00FFEAEE 088001 eora #1 |
00FFEAF0 097122 sta KeyLED |
00FFEAF2 01F089 tfr a,b |
00FFEAF4 04F clra |
00FFEAF5 08DE12 bsr KeybdSetLED |
00FFEAF7 020F1D bra dbgk2 |
dbgkNotScrolllock: |
00FFF8E7 0C1011 cmpb #SC_ALT |
00FFF8E9 026016 bne dbgkNotAlt |
00FFF8EB 00D120 tst KeyState1 |
00FFF8ED 02B008 bmi dbgk11 |
00FFF8EF 096121 lda KeyState2 |
00FFF8F1 08A002 ora #2 |
00FFF8F3 097121 sta KeyState2 |
00FFF8F5 020006 bra dbgk12 |
00FFEAF9 0C1011 cmpb #SC_ALT |
00FFEAFB 026016 bne dbgkNotAlt |
00FFEAFD 00D120 tst KeyState1 |
00FFEAFF 026008 bne dbgk11 |
00FFEB01 096121 lda KeyState2 |
00FFEB03 08A002 ora #2 |
00FFEB05 097121 sta KeyState2 |
00FFEB07 020006 bra dbgk12 |
dbgk11: |
00FFF8F7 096121 lda KeyState2 |
00FFF8F9 084FFD anda #~2 |
00FFF8FB 097121 sta KeyState2 |
00FFEB09 096121 lda KeyState2 |
00FFEB0B 084FFD anda #~2 |
00FFEB0D 097121 sta KeyState2 |
dbgk12: |
00FFF8FD 00F120 clr KeyState1 |
00FFF8FF 020F3C bra dbgk2 |
00FFEB0F 00F120 clr KeyState1 |
00FFEB11 020F03 bra dbgk2 |
dbgkNotAlt: |
00FFF901 00D120 tst KeyState1 |
00FFF903 027004 beq dbgk13 |
00FFF905 00F120 clr KeyState1 |
00FFF907 020F34 bra dbgk2 |
00FFEB13 00D120 tst KeyState1 |
00FFEB15 027004 beq dbgk13 |
00FFEB17 00F120 clr KeyState1 |
00FFEB19 020EFB bra dbgk2 |
dbgk13: |
00FFF909 096121 lda KeyState2 ; Check for CTRL-ALT-DEL |
00FFF90B 084006 anda #6 |
00FFF90D 081006 cmpa #6 |
00FFF90F 026008 bne dbgk14 |
00FFF911 0C1071 cmpb #SC_DEL |
00FFF913 026004 bne dbgk14 |
00FFF915 06E90FFFFFFE jmp [$FFFFFE] ; jump to reset vector |
00FFEB1B 096121 lda KeyState2 ; Check for CTRL-ALT-DEL |
00FFEB1D 084006 anda #6 |
00FFEB1F 081006 cmpa #6 |
00FFEB21 026008 bne dbgk14 |
00FFEB23 0C1071 cmpb #SC_DEL |
00FFEB25 026004 bne dbgk14 |
00FFEB27 06E90FFFFFFC jmp [$FFFFFC] ; jump to NMI vector |
dbgk14: |
00FFF919 00D121 tst KeyState2 ; extended code? |
00FFF91B 02A00B bpl dbgk15 |
00FFF91D 096121 lda KeyState2 |
00FFF91F 0847FF anda #$7FF |
00FFF921 097121 sta KeyState2 |
00FFF923 08EFFF680 ldx #keybdExtendedCodes |
00FFF926 020017 bra dbgk18 |
00FFEB2B 00D121 tst KeyState2 ; extended code? |
00FFEB2D 02A00B bpl dbgk15 |
00FFEB2F 096121 lda KeyState2 |
00FFEB31 0847FF anda #$7FF |
00FFEB33 097121 sta KeyState2 |
00FFEB35 08EFFE800 ldx #keybdExtendedCodes |
00FFEB38 020017 bra dbgk18 |
dbgk15: |
00FFF928 096121 lda KeyState2 ; Is CTRL down? |
00FFF92A 085004 bita #4 |
00FFF92C 027005 beq dbgk16 |
00FFF92E 08EFFF600 ldx #keybdControlCodes |
00FFF931 02000C bra dbgk18 |
00FFEB3A 096121 lda KeyState2 ; Is CTRL down? |
00FFEB3C 085004 bita #4 |
00FFEB3E 027005 beq dbgk16 |
00FFEB40 08EFFE780 ldx #keybdControlCodes |
00FFEB43 02000C bra dbgk18 |
dbgk16: |
00FFF933 085001 bita #1 ; Is shift down? |
00FFF935 027005 beq dbgk17 |
00FFF937 08EFFF500 ldx #shiftedScanCodes |
00FFF93A 020003 bra dbgk18 |
00FFEB45 085001 bita #1 ; Is shift down? |
00FFEB47 027005 beq dbgk17 |
00FFEB49 08EFFE680 ldx #shiftedScanCodes |
00FFEB4C 020003 bra dbgk18 |
dbgk17: |
00FFF93C 08EFFF400 ldx #unshiftedScanCodes |
00FFEB4E 08EFFE580 ldx #unshiftedScanCodes |
dbgk18: |
00FFF93F 03A abx |
00FFF940 0E6804 ldb ,x |
00FFF942 04F clra |
00FFF943 035090 puls x,pc ; and return |
00FFEB51 0E690FFFE580 ldb b,x ; load accb with ascii from table |
00FFEB55 04F clra |
00FFEB56 0350B0 puls x,y,pc ; and return |
|
|
00FFF945 04B04505904204F041052 fcb "KEYBOARD" |
00FFF94C 044 |
00FFF94D FFF957 fcw KeybdOpen |
00FFF94F FFF958 fcw KeybdClose |
00FFF951 FFF959 fcw KeybdRead |
00FFF953 FFF95A fcw KeybdWrite |
00FFF955 FFF95B fcw KeybdSeek |
00FFEB58 04B04505904204F041052 fcb "KEYBOARD" |
00FFEB5F 044 |
00FFEB60 FFEB6A fcw KeybdOpen |
00FFEB62 FFEB6B fcw KeybdClose |
00FFEB64 FFEB6C fcw KeybdRead |
00FFEB66 FFEB6D fcw KeybdWrite |
00FFEB68 FFEB6E fcw KeybdSeek |
|
; Keyboard Open: |
; Initialize the keyboard buffer head and tail indexes |
; |
KeybdOpen: |
00FFF957 039 rts |
00FFEB6A 039 rts |
|
; Keyboard Close: |
; Nothing to do except maybe clear the keyboard buffer |
; |
KeybdClose: |
00FFF958 039 rts |
00FFEB6B 039 rts |
; |
KeybdRead: |
00FFF959 039 rts |
00FFEB6C 039 rts |
; |
KeybdWrite: |
00FFF95A 039 rts |
00FFEB6D 039 rts |
|
KeybdSeek: |
00FFF95B 039 rts |
00FFEB6E 039 rts |
|
;============================================================================== |
; Serial I/O |
;============================================================================== |
|
; ============================================================================ |
; __ |
; \\__/ o\ (C) 2022 Robert Finch, Waterloo |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; Serial port routines for a WDC6551 compatible circuit. |
; |
; This source file is free software: you can redistribute it and/or modify |
; it under the terms of the GNU Lesser General Public License as published |
; by the Free Software Foundation, either version 3 of the License, or |
; (at your option) any later version. |
; |
; This source file is distributed in the hope that it will be useful, |
; but WITHOUT ANY WARRANTY; without even the implied warranty of |
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
; GNU General Public License for more details. |
; |
; You should have received a copy of the GNU General Public License |
; along with this program. If not, see <http://www.gnu.org/licenses/>. |
; |
; ============================================================================ |
; |
;------------------------------------------------------------------------------ |
; Initialize serial port. |
; |
; Clear buffer indexes. Two bytes are used for the buffer index even though |
; only a single byte is needed. This is for convenience in calculating the |
; number of characters in the buffer, done later. The upper byte remains at |
; zero. |
; The port is initialized for 9600 baud, 1 stop bit and 8 bits data sent. |
; The internal baud rate generator is used. |
; |
; Parameters: |
; none |
; Modifies: |
; d |
; Returns: |
; none |
;------------------------------------------------------------------------------ |
|
InitSerial: |
SerialInit: |
00FFEB6F 04F clra |
00FFEB70 05F clrb |
00FFEB71 0DD130 std SerHeadRcv-1 |
00FFEB73 0DD132 std SerTailRcv-1 |
00FFEB75 0DD135 std SerHeadXmit-1 |
00FFEB77 0DD137 std SerTailXmit-1 |
00FFEB79 00F139 clr SerRcvXon |
00FFEB7B 00F140 clr SerRcvXoff |
00FFEB7D 0150B6FFFFFFFE0 lda COREID |
sini1: |
00FFEB82 0B1FF0010 cmpa IOFocusID |
00FFEB85 026FFB bne sini1 |
00FFEB87 0C6009 ldb #$09 ; dtr,rts active, rxint enabled, no parity |
00FFEB89 0150F7FFFE30102 stb ACIA+ACIA_CMD |
00FFEB8E 0C601E ldb #$1E ; baud 9600, 1 stop bit, 8 bit, internal baud gen |
00FFEB90 0150F7FFFE30103 stb ACIA+ACIA_CTRL |
00FFEB95 0C60A6 ldb #$0A6 ; diable fifos, reset fifos |
00FFEB97 0150F7FFFE3010B stb ACIA+ACIA_CTRL2 |
00FFEB9C 039 rts |
|
;------------------------------------------------------------------------------ |
; SerialGetChar |
; |
; Check the serial port buffer to see if there's a char available. If there's |
; a char available then return it. If the buffer is almost empty then send an |
; XON. |
; |
; Stack Space: |
; 2 words |
; Parameters: |
; none |
; Modifies: |
; none |
; Returns: |
; d = character or -1 |
;------------------------------------------------------------------------------ |
|
SerialGetChar: |
00FFEB9D 034030 pshs x,y |
00FFEB9F 18E000000 ldy #0 |
00FFEBA2 01A010 sei ; disable interrupts |
00FFEBA4 08D082 bsr SerialRcvCount ; check number of chars in receive buffer |
00FFEBA6 0C1008 cmpb #8 ; less than 8? |
00FFEBA8 02200C bhi sgc2 |
00FFEBAA 0D6139 ldb SerRcvXon ; skip sending XON if already sent |
00FFEBAC 026008 bne sgc2 ; XON already sent? |
00FFEBAE 0C6011 ldb #XON ; if <8 send an XON |
00FFEBB0 00F140 clr SerRcvXoff ; clear XOFF status |
00FFEBB2 0D7139 stb SerRcvXon ; flag so we don't send it multiple times |
00FFEBB4 08D052 bsr SerialPutChar |
sgc2: |
00FFEBB6 0D6131 ldb SerHeadRcv ; check if anything is in buffer |
00FFEBB8 0D1133 cmpb SerTailRcv |
00FFEBBA 02700A beq sgcNoChars ; no? |
00FFEBBC 08EBFF000 ldx #SerRcvBuf |
00FFEBBF 04F clra |
00FFEBC0 0E6835 ldb b,x ; get byte from buffer |
00FFEBC2 00C131 inc SerHeadRcv ; 4k wrap around |
00FFEBC4 020003 bra sgcXit |
sgcNoChars: |
00FFEBC6 0CCFFFFFF ldd #-1 |
sgcXit: |
00FFEBC9 01C0EF cli |
00FFEBCB 0350B0 puls x,y,pc |
|
;------------------------------------------------------------------------------ |
; SerialPeekChar |
; |
; Check the serial port buffer to see if there's a char available. If there's |
; a char available then return it. But don't update the buffer indexes. No need |
; to send an XON here. |
; |
; Stack Space: |
; 0 words |
; Parameters: |
; none |
; Modifies: |
; none |
; Returns: |
; d = character or -1 |
;------------------------------------------------------------------------------ |
|
SerialPeekChar: |
00FFEBCD 034011 pshs x,ccr |
00FFEBCF 01A010 sei |
00FFEBD1 0D6131 ldb SerHeadRcv ; check if anything is in buffer |
00FFEBD3 0D1133 cmpb SerTailRcv |
00FFEBD5 027008 beq spcNoChars ; no? |
00FFEBD7 08EBFF000 ldx #SerRcvBuf |
00FFEBDA 04F clra |
00FFEBDB 0E6815 ldb b,x ; get byte from buffer |
00FFEBDD 020003 bra spcXit |
spcNoChars: |
00FFEBDF 0CCFFFFFF ldd #-1 |
spcXit: |
00FFEBE2 035091 puls x,ccr,pc |
|
;------------------------------------------------------------------------------ |
; SerialPeekChar |
; Get a character directly from the I/O port. This bypasses the input |
; buffer. |
; |
; Stack Space: |
; 0 words |
; Parameters: |
; none |
; Modifies: |
; d |
; Returns: |
; d = character or -1 |
;------------------------------------------------------------------------------ |
|
SerialPeekCharDirect: |
00FFEBE4 0150B6FFFFFFFE0 lda COREID ; Ensure we have the IO Focus |
00FFEBE9 0B1FF0010 cmpa IOFocusID |
00FFEBEC 026014 bne spcd0001 |
; Disallow interrupts between status read and rx read. |
00FFEBEE 01A010 sei |
00FFEBF0 0150F6FFFE30101 ldb ACIA+ACIA_STAT |
00FFEBF5 0C5008 bitb #8 ; look for Rx not empty |
00FFEBF7 027009 beq spcd0001 |
00FFEBF9 04F clra |
00FFEBFA 0150F6FFFE30100 ldb ACIA+ACIA_RX |
00FFEBFF 01C0EF cli |
00FFEC01 039 rts |
spcd0001: |
00FFEC02 0CCFFFFFF ldd #-1 |
00FFEC05 01C0EF cli |
00FFEC07 039 rts |
|
;------------------------------------------------------------------------------ |
; SerialPutChar |
; Put a character to the serial transmitter. This routine blocks until the |
; transmitter is empty. |
; |
; Stack Space |
; 0 words |
; Parameters: |
; b = character to put |
; Modifies: |
; none |
;------------------------------------------------------------------------------ |
|
SerialPutChar: |
00FFEC08 034003 pshs a,ccr |
spc0001: |
00FFEC0A 0150B6FFFFFFFE0 lda COREID ; Ensure we have the IO Focus |
00FFEC0F 0B1FF0010 cmpa IOFocusID |
00FFEC12 026FF6 bne spc0001 |
00FFEC14 01C0EF cli ; provide a window for an interrupt to occur |
00FFEC16 01A010 sei |
; Between the status read and the transmit do not allow an |
; intervening interrupt. |
00FFEC18 0150B6FFFE30101 lda ACIA+ACIA_STAT ; wait until the uart indicates tx empty |
00FFEC1D 085010 bita #16 ; bit #4 of the status reg |
00FFEC1F 027FE9 beq spc0001 ; branch if transmitter is not empty |
00FFEC21 0150F7FFFE30100 stb ACIA+ACIA_TX ; send the byte |
00FFEC26 035083 puls a,ccr,pc |
|
;------------------------------------------------------------------------------ |
; Calculate number of character in input buffer |
; |
; Parameters: |
; y = 0 if current core, otherwise reference to core memory area $Cyxxxx |
; Returns: |
; d = number of bytes in buffer. |
;------------------------------------------------------------------------------ |
|
SerialRcvCount: |
00FFEC28 04F clra |
00FFEC29 0E6A08133 ldb SerTailRcv,y |
00FFEC2C 0E0A08131 subb SerHeadRcv,y |
00FFEC2F 02C009 bge srcXit |
00FFEC31 0CC001000 ldd #$1000 |
00FFEC34 0A3A08131 subd SerHeadRcv,y |
00FFEC37 0E3A08133 addd SerTailRcv,y |
srcXit: |
00FFEC3A 039 rts |
|
;------------------------------------------------------------------------------ |
; Serial IRQ routine |
; |
; Keeps looping as long as it finds characters in the ACIA recieve buffer/fifo. |
; Received characters are buffered. If the buffer becomes full, new characters |
; will be lost. |
; |
; Parameters: |
; none |
; Modifies: |
; d,x |
; Returns: |
; none |
;------------------------------------------------------------------------------ |
|
SerialIRQ: |
sirqNxtByte: |
00FFEC3B 0150F6FFFE30101 ldb ACIA+ACIA_STAT ; check the status |
00FFEC40 0C5008 bitb #$08 ; bit 3 = rx full |
00FFEC42 027049 beq notRxInt |
00FFEC44 0150F6FFFE30100 ldb ACIA+ACIA_RX ; get data from Rx buffer to clear interrupt |
00FFEC49 0C1014 cmpb #CTRLT ; detect special keystroke |
00FFEC4B 026000 bne sirq0001 |
; bsr DumpTraceQueue |
sirq0001: |
00FFEC4D 034004 pshs b |
; Compute receive buffer address |
00FFEC4F 0B6FF0010 lda IOFocusID |
00FFEC52 048 asla |
00FFEC53 048 asla |
00FFEC54 048 asla |
00FFEC55 048 asla |
00FFEC56 08AC00 ora #$C00 |
00FFEC58 05F clrb |
00FFEC59 01F002 tfr d,y |
00FFEC5B 035004 puls b |
00FFEC5D 0A6A08133 lda SerTailRcv,y ; check if recieve buffer full |
00FFEC60 04C inca |
00FFEC61 0A1A08131 cmpa SerHeadRcv,y |
00FFEC64 027027 beq sirqRxFull |
00FFEC66 0A7A08133 sta SerTailRcv,y ; update tail pointer |
00FFEC69 04A deca ; backup |
00FFEC6A 01E089 exg a,b |
00FFEC6C 030A0A000BFF000 leax SerRcvBuf,y ; x = buffer address |
00FFEC71 0A7A0F sta b,x ; store recieved byte in buffer |
00FFEC73 06DA08140 tst SerRcvXoff,y ; check if xoff already sent |
00FFEC76 026FC3 bne sirqNxtByte |
00FFEC78 08DFAE bsr SerialRcvCount ; if more than 4080 chars in buffer |
00FFEC7A 0C1FF0 cmpb #4080 |
00FFEC7C 025FBD blo sirqNxtByte |
00FFEC7E 0C6013 ldb #XOFF ; send an XOFF |
00FFEC80 06FA08139 clr SerRcvXon,y ; clear XON status |
00FFEC83 0E7A08140 stb SerRcvXoff,y ; set XOFF status |
00FFEC86 0150F7FFFE30100 stb ACIA+ACIA_TX |
00FFEC8B 020FAE bra sirqNxtByte ; check the status for another byte |
sirqRxFull: |
notRxInt: |
00FFEC8D 039 rts |
|
nmeSerial: |
00FFEC8E 05306507206906106C000 fcb "Serial",0 |
|
;------------------------------------------------------------------------------ |
; Put a string to the serial port. |
; |
; Parameters: |
; d = pointer to string |
; Modifies: |
; none |
; Returns: |
; none |
;------------------------------------------------------------------------------ |
|
SerialPutString: |
00FFEC95 034016 pshs d,x |
00FFEC97 01F001 tfr d,x |
sps2: |
00FFEC99 0E6804 ldb ,x |
00FFEC9B 027006 beq spsXit |
00FFEC9D 030001 inx |
00FFEC9F 08DF67 bsr SerialPutChar |
00FFECA1 020FF6 bra sps2 |
spsXit: |
00FFECA3 035096 puls d,x,pc |
|
;------------------------------------------------------------------------------ |
; A little routine to test serial output. |
; |
; Parameters: |
; none |
; Modifies: |
; none |
; Returns: |
; none |
;------------------------------------------------------------------------------ |
|
SerialOutputTest: |
00FFECA5 034006 pshs d |
00FFECA7 0CCFFECC5 ldd #msgSerialTest |
00FFECAA 017FFF6F5 lbsr DisplayString |
*** warning 1: Long branch within short branch range could be optimized |
00FFECAD 08DEC0 bsr SerialInit |
sotst1: |
00FFECAF 0C6011 ldb #XON |
00FFECB1 08DF55 bsr SerialPutChar |
00FFECB3 08DF53 bsr SerialPutChar |
00FFECB5 08DF51 bsr SerialPutChar |
00FFECB7 0CCFFECC5 ldd #msgSerialTest |
00FFECBA 08DFD9 bsr SerialPutString |
00FFECBC 01700001B lbsr INCH |
00FFECBF 0C1003 cmpb #CTRLC |
00FFECC1 026FEC bne sotst1 |
00FFECC3 035086 puls d,pc |
|
msgSerialTest: |
00FFECC5 05306507206906106C020 fcb "Serial port test",CR,LF,0 |
00FFECCC 07006F072074020074065 |
00FFECD3 07307400D00A000 |
|
|
;------------------------------------------------------------------------------ |
; Check if there is a keyboard character available. If so return true (<0) |
; otherwise return false (0) in accb. |
;------------------------------------------------------------------------------ |
; |
KeybdCheckForKeyDirect: |
00FFF95C 020EDB bra DBGCheckForKey |
00FFECD8 020D36 bra DBGCheckForKey |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
INCH: |
00FFF95E 0CCFFFFFF ldd #-1 ; block if no key available |
00FFF961 020ED8 bra DBGGetKey |
00FFECDA 034004 pshs b |
INCH2: |
00FFECDC 0150F6FFFFFFFE0 ldb COREID |
00FFECE1 0F1FF0010 cmpb IOFocusID ; if we do not have focus, block |
00FFECE4 026FF6 bne INCH2 |
; ldb #$800 ; block if no key available, get scancode directly |
; bra GetKey |
; jsr [CharInVec] ; vector is being overwritten somehow |
00FFECE6 017FFFEFB lbsr SerialPeekCharDirect |
*** warning 1: Long branch within short branch range could be optimized |
00FFECE9 04D tsta |
00FFECEA 02B003 bmi INCH1 ; block if no key available |
00FFECEC 032601 leas 1,s ; get rid of blocking status |
00FFECEE 039 rts |
INCH1: |
00FFECEF 035004 puls b ; check blocking status |
00FFECF1 05D tstb |
00FFECF2 02BFE6 bmi INCH ; if blocking, loop |
00FFECF4 0CCFFFFFF ldd #-1 ; return -1 if no char available |
00FFECF7 039 rts |
|
INCHE: |
00FFF963 08DFF9 bsr INCH |
00FFF965 020009 bra INCHEK3 |
00FFECF8 08DFE0 bsr INCH |
00FFECFA 020009 bra INCHEK3 |
|
INCHEK: |
00FFF967 08DFF5 bsr INCH |
00FFF969 01507DFFFFFCA00 tst KeybdEcho |
00FFF96E 02700B beq INCHEK1 |
00FFECFC 08DFDC bsr INCH |
00FFECFE 01507DFFFFFCA00 tst KeybdEcho |
00FFED03 02700C beq INCHEK1 |
INCHEK3: |
00FFF970 08100D cmpa #CR |
00FFF972 026005 bne INCHEK2 |
00FFF974 017FFD75B lbsr CRLF |
00FFED05 08100D cmpa #CR |
00FFED07 026005 bne INCHEK2 |
00FFED09 017FFE3C6 lbsr CRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFF977 020002 bra INCHEK1 |
00FFED0C 020003 bra INCHEK1 |
INCHEK2: |
00FFF979 08D920 bsr DisplayChar |
00FFED0E 017FFF5D0 lbsr DisplayChar |
*** warning 1: Long branch within short branch range could be optimized |
INCHEK1: |
00FFF97B 039 rts |
00FFED11 039 rts |
|
OUTCH: |
00FFF97C 06E90F000800 jmp [CharOutVec] |
00FFED12 06E90F000800 jmp [CharOutVec] |
|
;------------------------------------------------------------------------------ |
; r1 0=echo off, non-zero = echo on |
1756,8 → 2649,8
;------------------------------------------------------------------------------ |
; |
SetKeyboardEcho: |
00FFF980 0150F7FFFFFCA00 stb KeybdEcho |
00FFF985 039 rts |
00FFED16 0150F7FFFFFCA00 stb KeybdEcho |
00FFED1B 039 rts |
|
|
;------------------------------------------------------------------------------ |
1766,114 → 2659,1414
;------------------------------------------------------------------------------ |
|
ShowSprites: |
00FFF986 0150BFFFFE103C0 stx SPRITE_CTRL+SPRITE_EN |
00FFF98B 0150FDFFFE103C2 std SPRITE_CTRL+SPRITE_EN+2 |
00FFF990 039 rts |
00FFED1C 0150BFFFFE103C0 stx SPRITE_CTRL+SPRITE_EN |
00FFED21 0150FDFFFE103C2 std SPRITE_CTRL+SPRITE_EN+2 |
00FFED26 039 rts |
|
;============================================================================== |
; Femtiki Operating System. |
;============================================================================== |
|
OSCallTbl: |
00FFED27 000000 fcw 0 |
00FFED29 000000 fcw 0 |
00FFED2B 000000 fcw 0 |
00FFED2D 000000 fcw 0 |
00FFED2F 000000 fcw 0 |
00FFED31 000000 fcw 0 |
00FFED33 000000 fcw 0 |
00FFED35 000000 fcw 0 |
00FFED37 000000 fcw 0 |
00FFED39 000000 fcw 0 |
00FFED3B 000000 fcw 0 |
00FFED3D 000000 fcw 0 |
00FFED3F 000000 fcw 0 |
00FFED41 000000 fcw 0 |
00FFED43 000000 fcw 0 |
00FFED45 000000 fcw 0 |
00FFED47 000000 fcw 0 |
00FFED49 000000 fcw 0 |
00FFED4B 000000 fcw 0 |
00FFED4D 000000 fcw 0 |
00FFED4F 000000 fcw 0 |
00FFED51 000000 fcw 0 |
00FFED53 FFED84 fcw ReleaseIOFocus |
00FFED55 000000 fcw 0 |
00FFED57 FFED6D fcw RequestIOFocus |
|
OSCall: |
; wait for availability |
osc1: |
00FFED59 07DEF0011 tst OSSEMA+1 |
00FFED5C 027FFB beq osc1 |
00FFED5E 058 aslb |
00FFED5F 08EFFED27 ldx #OSCallTbl |
00FFED62 03A abx |
00FFED63 06D804 tst ,x |
00FFED65 027002 beq oscx |
00FFED67 06E904 jmp [,x] |
oscx: |
00FFED69 07FEF0011 clr OSSEMA+1 |
00FFED6C 039 rts |
|
RequestIOFocus: |
00FFED6D 0150F6FFFFFFFE0 ldb COREID |
00FFED72 08EFF0000 ldx #IOFocusList |
00FFED75 03A abx |
00FFED76 0A7804 sta ,x |
00FFED78 07DFF0010 tst IOFocusID |
00FFED7B 126FFFFEB lbne oscx |
*** warning 1: Long branch within short branch range could be optimized |
00FFED7E 0F7FF0010 stb IOFocusID |
00FFED81 016FFFFE5 lbra oscx |
*** warning 1: Long branch within short branch range could be optimized |
|
ReleaseIOFocus: |
00FFED84 0150F6FFFFFFFE0 ldb COREID |
00FFED89 08EFF0000 ldx #IOFocusList |
00FFED8C 03A abx |
00FFED8D 06F804 clr ,x ; clear the request indicator |
00FFED8F 017FFF44F lbsr CopyScreenToVirtualScreen |
*** warning 1: Long branch within short branch range could be optimized |
00FFED92 0F1FF0010 cmpb IOFocusID ; are we the one with the focus? |
00FFED95 126FFFFD1 lbne oscx |
*** warning 1: Long branch within short branch range could be optimized |
; We had the focus, so now a new core needs the focus. |
; Search the focus list for a requestor. If no requester |
; is found, give focus to core #1. |
00FFED98 08600F lda #15 |
riof2: |
00FFED9A 05C incb |
00FFED9B 0C400F andb #15 |
00FFED9D 03A abx |
00FFED9E 06D804 tst ,x |
00FFEDA0 026009 bne riof1 |
00FFEDA2 04A deca |
00FFEDA3 026FF5 bne riof2 |
; If no focus is requested by anyone, give to core #1 |
00FFEDA5 0C6001 ldb #1 |
00FFEDA7 086018 lda #24 |
00FFEDA9 0A7804 sta ,x |
riof1: |
00FFEDAB 0F7FF0010 stb IOFocusID |
00FFEDAE 017FFF3F9 lbsr CopyVirtualScreenToScreen |
*** warning 1: Long branch within short branch range could be optimized |
00FFEDB1 016FFFFB5 lbra oscx |
*** warning 1: Long branch within short branch range could be optimized |
|
|
;============================================================================== |
; Disassembler |
;============================================================================== |
|
; ============================================================================ |
; __ |
; \\__/ o\ (C) 2013-2022 Robert Finch, Waterloo |
; \ __ / All rights reserved. |
; \/_// robfinch<remove>@opencores.org |
; || |
; |
; |
; BSD 3-Clause License |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; |
; 1. Redistributions of source code must retain the above copyright notice, this |
; list of conditions and the following disclaimer. |
; |
; 2. Redistributions in binary form must reproduce the above copyright notice, |
; this list of conditions and the following disclaimer in the documentation |
; and/or other materials provided with the distribution. |
; |
; 3. Neither the name of the copyright holder nor the names of its |
; contributors may be used to endorse or promote products derived from |
; this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
; |
; ============================================================================ |
; |
; Disassembler |
; |
; |
DIRECT EQU 1 |
LSREL EQU 2 |
IMMB EQU 3 |
SREL EQU 4 |
NDX EQU 5 |
EXT EQU 6 |
IMMW EQU 7 |
FAREXT EQU 8 |
|
distbl1: |
; 00 to 0F |
00FFEDB4 04E045047020001 fcb "NEG ", DIRECT |
00FFEDB9 020020020020000 fcb " ", 0 |
00FFEDBE 020020020020000 fcb " ", 0 |
00FFEDC3 04304F04D020001 fcb "COM ", DIRECT |
00FFEDC8 04C053052020001 fcb "LSR ", DIRECT |
00FFEDCD 020020020020000 fcb " ", 0 |
00FFEDD2 05204F052020001 fcb "ROR ", DIRECT |
00FFEDD7 041053052020001 fcb "ASR ", DIRECT |
00FFEDDC 04105304C020001 fcb "ASL ", DIRECT |
00FFEDE1 05204F04C020001 fcb "ROL ", DIRECT |
00FFEDE6 044045043020001 fcb "DEC ", DIRECT |
00FFEDEB 020020020020000 fcb " ", 0 |
00FFEDF0 04904E043020001 fcb "INC ", DIRECT |
00FFEDF5 054053054020001 fcb "TST ", DIRECT |
00FFEDFA 04A04D050020001 fcb "JMP ", DIRECT |
00FFEDFF 04304C052020001 fcb "CLR ", DIRECT |
|
; 10 to 1F |
00FFEE04 020020020020000 fcb " ", 0 |
00FFEE09 020020020020000 fcb " ", 0 |
00FFEE0E 04E04F050020000 fcb "NOP ", 0 |
00FFEE13 05305904E043000 fcb "SYNC", 0 |
00FFEE18 020020020020000 fcb " ", 0 |
00FFEE1D 046041052020000 fcb "FAR ", 0 |
00FFEE22 04C042052041002 fcb "LBRA", LSREL |
00FFEE27 04C042053052002 fcb "LBSR", LSREL |
00FFEE2C 020020020020000 fcb " ", 0 |
00FFEE31 044041041020000 fcb "DAA ", 0 |
00FFEE36 04F052043043003 fcb "ORCC", IMMB |
00FFEE3B 020020020020000 fcb " ", 0 |
00FFEE40 04104E044043003 fcb "ANDC", IMMB |
00FFEE45 053045058020000 fcb "SEX ", 0 |
00FFEE4A 045058047020003 fcb "EXG ", IMMB |
00FFEE4F 054046052020003 fcb "TFR ", IMMB |
|
; 20 to 2F |
00FFEE54 042052041020004 fcb "BRA ", SREL |
00FFEE59 04205204E020004 fcb "BRN ", SREL |
00FFEE5E 042048049020004 fcb "BHI ", SREL |
00FFEE63 04204C053020004 fcb "BLS ", SREL |
00FFEE68 042048053020004 fcb "BHS ", SREL |
00FFEE6D 04204C04F020004 fcb "BLO ", SREL |
00FFEE72 04204E045020004 fcb "BNE ", SREL |
00FFEE77 042045051020004 fcb "BEQ ", SREL |
00FFEE7C 042056043020004 fcb "BVC ", SREL |
00FFEE81 042056053020004 fcb "BVS ", SREL |
00FFEE86 04205004C020004 fcb "BPL ", SREL |
00FFEE8B 04204D049020004 fcb "BMI ", SREL |
00FFEE90 042047045020004 fcb "BGE ", SREL |
00FFEE95 04204C054020004 fcb "BLT ", SREL |
00FFEE9A 042047054020004 fcb "BGT ", SREL |
00FFEE9F 04204C045020004 fcb "BLE ", SREL |
|
; 30 to 3F |
00FFEEA4 04C045041058005 fcb "LEAX", NDX |
00FFEEA9 04C045041059005 fcb "LEAY", NDX |
00FFEEAE 04C045041053005 fcb "LEAS", NDX |
00FFEEB3 04C045041055005 fcb "LEAU", NDX |
00FFEEB8 050053048053003 fcb "PSHS", IMMB |
00FFEEBD 05005504C053003 fcb "PULS", IMMB |
00FFEEC2 050053048055003 fcb "PSHU", IMMB |
00FFEEC7 05005504C055003 fcb "PULU", IMMB |
00FFEECC 052054046020000 fcb "RTF ", 0 |
00FFEED1 052054053020000 fcb "RTS ", 0 |
00FFEED6 041042058020000 fcb "ABX ", 0 |
00FFEEDB 052054049020000 fcb "RTI ", 0 |
00FFEEE0 043057041049003 fcb "CWAI", IMMB |
00FFEEE5 04D05504C020000 fcb "MUL ", 0 |
00FFEEEA 020020020020000 fcb " ", 0 |
00FFEEEF 053057049020000 fcb "SWI ", 0 |
|
; 40 to 4F |
00FFEEF4 04E045047041000 fcb "NEGA", 0 |
00FFEEF9 020020020020000 fcb " ", 0 |
00FFEEFE 020020020020000 fcb " ", 0 |
00FFEF03 04304F04D041000 fcb "COMA", 0 |
00FFEF08 04C053052041000 fcb "LSRA", 0 |
00FFEF0D 020020020020000 fcb " ", 0 |
00FFEF12 05204F052041000 fcb "RORA", 0 |
00FFEF17 041053052041000 fcb "ASRA", 0 |
00FFEF1C 04105304C041000 fcb "ASLA", 0 |
00FFEF21 05204F04C041000 fcb "ROLA", 0 |
00FFEF26 044045043041000 fcb "DECA", 0 |
00FFEF2B 020020020020000 fcb " ", 0 |
00FFEF30 04904E043041000 fcb "INCA", 0 |
00FFEF35 054053054041000 fcb "TSTA", 0 |
00FFEF3A 020020020020000 fcb " ", 0 |
00FFEF3F 04304C052041000 fcb "CLRA", 0 |
|
; 50 to 5F |
00FFEF44 04E045047042000 fcb "NEGB", 0 |
00FFEF49 020020020020000 fcb " ", 0 |
00FFEF4E 020020020020000 fcb " ", 0 |
00FFEF53 04304F04D042000 fcb "COMB", 0 |
00FFEF58 04C053052042000 fcb "LSRB", 0 |
00FFEF5D 020020020020000 fcb " ", 0 |
00FFEF62 05204F052042000 fcb "RORB", 0 |
00FFEF67 041053052042000 fcb "ASRB", 0 |
00FFEF6C 04105304C042000 fcb "ASLB", 0 |
00FFEF71 05204F04C042000 fcb "ROLB", 0 |
00FFEF76 044045043042000 fcb "DECB", 0 |
00FFEF7B 020020020020000 fcb " ", 0 |
00FFEF80 04904E043042000 fcb "INCB", 0 |
00FFEF85 054053054042000 fcb "TSTB", 0 |
00FFEF8A 020020020020000 fcb " ", 0 |
00FFEF8F 04304C052042000 fcb "CLRB", 0 |
|
; 60 to 6F |
00FFEF94 04E045047020005 fcb "NEG ", NDX |
00FFEF99 020020020020000 fcb " ", 0 |
00FFEF9E 020020020020000 fcb " ", 0 |
00FFEFA3 04304F04D020005 fcb "COM ", NDX |
00FFEFA8 04C053052020005 fcb "LSR ", NDX |
00FFEFAD 020020020020000 fcb " ", 0 |
00FFEFB2 05204F052020005 fcb "ROR ", NDX |
00FFEFB7 041053052020005 fcb "ASR ", NDX |
00FFEFBC 04105304C020005 fcb "ASL ", NDX |
00FFEFC1 05204F04C020005 fcb "ROL ", NDX |
00FFEFC6 044045043020005 fcb "DEC ", NDX |
00FFEFCB 020020020020000 fcb " ", 0 |
00FFEFD0 04904E043020005 fcb "INC ", NDX |
00FFEFD5 054053054020005 fcb "TST ", NDX |
00FFEFDA 04A04D050020005 fcb "JMP ", NDX |
00FFEFDF 04304C052020005 fcb "CLR ", NDX |
|
; 70 to 7F |
00FFEFE4 04E045047020006 fcb "NEG ", EXT |
00FFEFE9 020020020020000 fcb " ", 0 |
00FFEFEE 020020020020000 fcb " ", 0 |
00FFEFF3 04304F04D020006 fcb "COM ", EXT |
00FFEFF8 04C053052020006 fcb "LSR ", EXT |
00FFEFFD 020020020020000 fcb " ", 0 |
00FFF002 05204F052020006 fcb "ROR ", EXT |
00FFF007 041053052020006 fcb "ASR ", EXT |
00FFF00C 04105304C020006 fcb "ASL ", EXT |
00FFF011 05204F04C020006 fcb "ROL ", EXT |
00FFF016 044045043020006 fcb "DEC ", EXT |
00FFF01B 020020020020000 fcb " ", 0 |
00FFF020 04904E043020006 fcb "INC ", EXT |
00FFF025 054053054020006 fcb "TST ", EXT |
00FFF02A 04A04D050020006 fcb "JMP ", EXT |
00FFF02F 04304C052020006 fcb "CLR ", EXT |
|
; 80 to 8F |
00FFF034 053055042041003 fcb "SUBA", IMMB |
00FFF039 04304D050041003 fcb "CMPA", IMMB |
00FFF03E 053042043041003 fcb "SBCA", IMMB |
00FFF043 053055042044007 fcb "SUBD", IMMW |
00FFF048 04104E044041003 fcb "ANDA", IMMB |
00FFF04D 042049054041003 fcb "BITA", IMMB |
00FFF052 04C044041020003 fcb "LDA ", IMMB |
00FFF057 020020020020000 fcb " ", 0 |
00FFF05C 04504F052041003 fcb "EORA", IMMB |
00FFF061 041044043041003 fcb "ADCA", IMMB |
00FFF066 04F052041020003 fcb "ORA ", IMMB |
00FFF06B 041044044041003 fcb "ADDA", IMMB |
00FFF070 04304D050058007 fcb "CMPX", IMMW |
00FFF075 042053052020004 fcb "BSR ", SREL |
00FFF07A 04C044058020007 fcb "LDX ", IMMW |
00FFF07F 04A04D046020008 fcb "JMF ", FAREXT |
|
; 90 to 9F |
00FFF084 053055042041001 fcb "SUBA", DIRECT |
00FFF089 04304D050041001 fcb "CMPA", DIRECT |
00FFF08E 053042043041001 fcb "SBCA", DIRECT |
00FFF093 053055042044001 fcb "SUBD", DIRECT |
00FFF098 04104E044041001 fcb "ANDA", DIRECT |
00FFF09D 042049054041001 fcb "BITA", DIRECT |
00FFF0A2 04C044041020001 fcb "LDA ", DIRECT |
00FFF0A7 053054041020001 fcb "STA ", DIRECT |
00FFF0AC 04504F052041001 fcb "EORA", DIRECT |
00FFF0B1 041044043041001 fcb "ADCA", DIRECT |
00FFF0B6 04F052041020001 fcb "ORA ", DIRECT |
00FFF0BB 041044044041001 fcb "ADDA", DIRECT |
00FFF0C0 04304D050058001 fcb "CMPX", DIRECT |
00FFF0C5 04A053052020001 fcb "JSR ", DIRECT |
00FFF0CA 04C044058020001 fcb "LDX ", DIRECT |
00FFF0CF 053054058020001 fcb "STX ", DIRECT |
|
; A0 to AF |
00FFF0D4 053055042041005 fcb "SUBA", NDX |
00FFF0D9 04304D050041005 fcb "CMPA", NDX |
00FFF0DE 053042043041005 fcb "SBCA", NDX |
00FFF0E3 053055042044005 fcb "SUBD", NDX |
00FFF0E8 04104E044041005 fcb "ANDA", NDX |
00FFF0ED 042049054041005 fcb "BITA", NDX |
00FFF0F2 04C044041020005 fcb "LDA ", NDX |
00FFF0F7 053054041020005 fcb "STA ", NDX |
00FFF0FC 04504F052041005 fcb "EORA", NDX |
00FFF101 041044043041005 fcb "ADCA", NDX |
00FFF106 04F052041020005 fcb "ORA ", NDX |
00FFF10B 041044044041005 fcb "ADDA", NDX |
00FFF110 04304D050058005 fcb "CMPX", NDX |
00FFF115 04A053052020005 fcb "JSR ", NDX |
00FFF11A 04C044058020005 fcb "LDX ", NDX |
00FFF11F 053054058020005 fcb "STX ", NDX |
|
; B0 to BF |
00FFF124 053055042041006 fcb "SUBA", EXT |
00FFF129 04304D050041006 fcb "CMPA", EXT |
00FFF12E 053042043041006 fcb "SBCA", EXT |
00FFF133 053055042044006 fcb "SUBD", EXT |
00FFF138 04104E044041006 fcb "ANDA", EXT |
00FFF13D 042049054041006 fcb "BITA", EXT |
00FFF142 04C044041020006 fcb "LDA ", EXT |
00FFF147 053054041020006 fcb "STA ", EXT |
00FFF14C 04504F052041006 fcb "EORA", EXT |
00FFF151 041044043041006 fcb "ADCA", EXT |
00FFF156 04F052041020006 fcb "ORA ", EXT |
00FFF15B 041044044041006 fcb "ADDA", EXT |
00FFF160 04304D050058006 fcb "CMPX", EXT |
00FFF165 04A053052020006 fcb "JSR ", EXT |
00FFF16A 04C044058020006 fcb "LDX ", EXT |
00FFF16F 053054058020006 fcb "STX ", EXT |
|
; C0 to CF |
00FFF174 053055042042003 fcb "SUBB", IMMB |
00FFF179 04304D050042003 fcb "CMPB", IMMB |
00FFF17E 053042043062003 fcb "SBCb", IMMB |
00FFF183 041044044044007 fcb "ADDD", IMMW |
00FFF188 04104E044042003 fcb "ANDB", IMMB |
00FFF18D 042049054042003 fcb "BITB", IMMB |
00FFF192 04C044042020003 fcb "LDB ", IMMB |
00FFF197 020020020020000 fcb " ", 0 |
00FFF19C 04504F052042003 fcb "EORB", IMMB |
00FFF1A1 041044043042003 fcb "ADCB", IMMB |
00FFF1A6 04F052042020003 fcb "ORB ", IMMB |
00FFF1AB 041044044042003 fcb "ADDB", IMMB |
00FFF1B0 04C044044020007 fcb "LDD ", IMMW |
00FFF1B5 020020020020004 fcb " ", SREL |
00FFF1BA 04C044055020007 fcb "LDU ", IMMW |
00FFF1BF 04A053046020008 fcb "JSF ", FAREXT |
|
; D0 to DF |
00FFF1C4 053055042042001 fcb "SUBB", DIRECT |
00FFF1C9 04304D050042001 fcb "CMPB", DIRECT |
00FFF1CE 053042043042001 fcb "SBCB", DIRECT |
00FFF1D3 041044044044001 fcb "ADDD", DIRECT |
00FFF1D8 04104E044042001 fcb "ANDB", DIRECT |
00FFF1DD 042049054042001 fcb "BITB", DIRECT |
00FFF1E2 04C044042020001 fcb "LDB ", DIRECT |
00FFF1E7 053054042020001 fcb "STB ", DIRECT |
00FFF1EC 04504F052042001 fcb "EORB", DIRECT |
00FFF1F1 041044043042001 fcb "ADCB", DIRECT |
00FFF1F6 04F052042020001 fcb "ORB ", DIRECT |
00FFF1FB 041044044042001 fcb "ADDB", DIRECT |
00FFF200 04C044044020001 fcb "LDD ", DIRECT |
00FFF205 053054044020001 fcb "STD ", DIRECT |
00FFF20A 04C044055020001 fcb "LDU ", DIRECT |
00FFF20F 053054055020001 fcb "STU ", DIRECT |
|
; E0 to EF |
00FFF214 053055042042005 fcb "SUBB", NDX |
00FFF219 04304D050042005 fcb "CMPB", NDX |
00FFF21E 053042043042005 fcb "SBCB", NDX |
00FFF223 041044044044005 fcb "ADDD", NDX |
00FFF228 04104E044042005 fcb "ANDB", NDX |
00FFF22D 042049054042005 fcb "BITB", NDX |
00FFF232 04C044042020005 fcb "LDB ", NDX |
00FFF237 053054042020005 fcb "STB ", NDX |
00FFF23C 04504F052042005 fcb "EORB", NDX |
00FFF241 041044043042005 fcb "ADCB", NDX |
00FFF246 04F052042020005 fcb "ORB ", NDX |
00FFF24B 041044044042005 fcb "ADDB", NDX |
00FFF250 04C044044020005 fcb "LDD ", NDX |
00FFF255 053054044020005 fcb "STD ", NDX |
00FFF25A 04C044055020005 fcb "LDU ", NDX |
00FFF25F 053054055020005 fcb "STU ", NDX |
|
; F0 to FF |
00FFF264 053055042042006 fcb "SUBB", EXT |
00FFF269 04304D050042006 fcb "CMPB", EXT |
00FFF26E 053042043042006 fcb "SBCB", EXT |
00FFF273 041044044044006 fcb "ADDD", EXT |
00FFF278 04104E044042006 fcb "ANDB", EXT |
00FFF27D 042049054042006 fcb "BITB", EXT |
00FFF282 04C044042020006 fcb "LDB ", EXT |
00FFF287 053054042020006 fcb "STB ", EXT |
00FFF28C 04504F052042006 fcb "EORB", EXT |
00FFF291 041044043042006 fcb "ADCB", EXT |
00FFF296 04F052042020006 fcb "ORB ", EXT |
00FFF29B 041044044042006 fcb "ADDB", EXT |
00FFF2A0 04C044044020006 fcb "LDD ", EXT |
00FFF2A5 053054044020006 fcb "STD ", EXT |
00FFF2AA 04C044055020006 fcb "LDU ", EXT |
00FFF2AF 053054055020006 fcb "STU ", EXT |
|
; 120 to 12F |
distbl2: |
00FFF2B4 04C042052041 fcb "LBRA" |
00FFF2B8 04C04205204E fcb "LBRN" |
00FFF2BC 04C042048049 fcb "LBHI" |
00FFF2C0 04C04204C053 fcb "LBLS" |
00FFF2C4 04C042048053 fcb "LBHS" |
00FFF2C8 04C04204C04F fcb "LBLO" |
00FFF2CC 04C04204E045 fcb "LBNE" |
00FFF2D0 04C042045051 fcb "LBEQ" |
00FFF2D4 04C042056043 fcb "LBVC" |
00FFF2D8 04C042056053 fcb "LBVS" |
00FFF2DC 04C04205004C fcb "LBPL" |
00FFF2E0 04C04204D049 fcb "LBMI" |
00FFF2E4 04C042047045 fcb "LBGE" |
00FFF2E8 04C04204C054 fcb "LBLT" |
00FFF2EC 04C042047054 fcb "LBGT" |
00FFF2F0 04C04204C045 fcb "LBLE" |
|
distbl3: |
00FFF2F4 13F fcb $13F |
00FFF2F5 183 fcb $183 |
00FFF2F6 18C fcb $18C |
00FFF2F7 18E fcb $18E |
00FFF2F8 193 fcb $193 |
00FFF2F9 19C fcb $19C |
00FFF2FA 19E fcb $19E |
00FFF2FB 19F fcb $19F |
00FFF2FC 1A3 fcb $1A3 |
00FFF2FD 1AC fcb $1AC |
00FFF2FE 1AE fcb $1AE |
00FFF2FF 1AF fcb $1AF |
00FFF300 1B3 fcb $1B3 |
00FFF301 1BC fcb $1BC |
00FFF302 1BE fcb $1BE |
00FFF303 1BF fcb $1BF |
00FFF304 1CE fcb $1CE |
00FFF305 1DE fcb $1DE |
00FFF306 1DF fcb $1DF |
00FFF307 1EE fcb $1EE |
00FFF308 1EF fcb $1EF |
00FFF309 1FE fcb $1FE |
00FFF30A 1FF fcb $1FF |
00FFF30B 23F fcb $23F |
00FFF30C 283 fcb $283 |
00FFF30D 28C fcb $28C |
00FFF30E 293 fcb $293 |
00FFF30F 29C fcb $29C |
00FFF310 2A3 fcb $2A3 |
00FFF311 2AC fcb $2AC |
00FFF312 2B3 fcb $2B3 |
00FFF313 2BC fcb $2BC |
|
distbl4: |
00FFF314 053057049032000 fcb "SWI2", 0 |
00FFF319 04304D050044007 fcb "CMPD", IMMW |
00FFF31E 04304D050059007 fcb "CMPY", IMMW |
00FFF323 04C044059020007 fcb "LDY ", IMMW |
00FFF328 04304D050044001 fcb "CMPD", DIRECT |
00FFF32D 04304D050059001 fcb "CMPY", DIRECT |
00FFF332 04C044059020001 fcb "LDY ", DIRECT |
00FFF337 053054059020001 fcb "STY ", DIRECT |
00FFF33C 04304D050044005 fcb "CMPD", NDX |
00FFF341 04304D050059005 fcb "CMPY", NDX |
00FFF346 04C044059020005 fcb "LDY ", NDX |
00FFF34B 053054059020005 fcb "STY ", NDX |
00FFF350 04304D050044006 fcb "CMPD", EXT |
00FFF355 04304D050059006 fcb "CMPY", EXT |
00FFF35A 04C044059020006 fcb "LDY ", EXT |
00FFF35F 053054059020006 fcb "STY ", EXT |
00FFF364 04C044053020007 fcb "LDS ", IMMW |
00FFF369 04C044053020001 fcb "LDS ", DIRECT |
00FFF36E 053054053020001 fcb "STS ", DIRECT |
00FFF373 04C044053020005 fcb "LDS ", NDX |
00FFF378 053054053020005 fcb "STS ", NDX |
00FFF37D 04C044053020006 fcb "LDS ", EXT |
00FFF382 053054053020006 fcb "STS ", EXT |
00FFF387 053057049033000 fcb "SWI3", 0 |
00FFF38C 04304D050055007 fcb "CMPU", IMMW |
00FFF391 04304D050053007 fcb "CMPS", IMMW |
00FFF396 04304D050055001 fcb "CMPU", DIRECT |
00FFF39B 04304D050053001 fcb "CMPS", DIRECT |
00FFF3A0 04304D050055005 fcb "CMPU", NDX |
00FFF3A5 04304D050053005 fcb "CMPS", NDX |
00FFF3AA 04304D050055006 fcb "CMPU", EXT |
00FFF3AF 04304D050053006 fcb "CMPS", EXT |
|
disassem: |
00FFF3B4 0170005FE lbsr GetTwoParams |
00FFF3B7 017FFDD18 lbsr CRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3BA 1BE000922 ldy mon_r1+2 |
disLoop1: |
00FFF3BD 01F020 tfr y,d |
00FFF3BF 017FFF02B lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3C2 0C6020 ldb #' ' |
00FFF3C4 017FFF94B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3C7 0E6A00 ldb ,y+ |
00FFF3C9 0C5300 bitb #$300 |
00FFF3CB 126000400 lbne dis1 |
dis20: |
00FFF3CE 08EFFEDB4 ldx #distbl1 |
dis23: |
00FFF3D1 086005 lda #5 |
00FFF3D3 03D mul |
00FFF3D4 03A abx |
00FFF3D5 0E6800 ldb ,x+ |
00FFF3D7 017FFF938 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3DA 0E6800 ldb ,x+ |
00FFF3DC 017FFF933 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3DF 0E6800 ldb ,x+ |
00FFF3E1 017FFF92E lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3E4 0E6800 ldb ,x+ |
00FFF3E6 017FFF929 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3E9 0C6020 ldb #' ' |
00FFF3EB 017FFF924 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3EE 0E6800 ldb ,x+ |
00FFF3F0 12700042E lbeq disNextLine |
00FFF3F3 0C1001 cmpb #DIRECT |
00FFF3F5 026008 bne disNotDirect |
00FFF3F7 0E6A00 ldb ,y+ |
00FFF3F9 017FFEFFA lbsr DispByteAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF3FC 016000422 lbra disNextLine |
disNotDirect: |
00FFF3FF 0C1002 cmpb #LSREL |
00FFF401 02600C bne disNotLRel |
dis21: |
00FFF403 0ECA01 ldd ,y++ |
dis2: |
00FFF405 030A0B leax d,y |
00FFF407 01F010 tfr x,d |
00FFF409 017FFEFE1 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF40C 016000412 lbra disNextLine |
disNotLRel: |
00FFF40F 0C1004 cmpb #SREL |
00FFF411 026005 bne disNotRel |
00FFF413 0E6A00 ldb ,y+ |
00FFF415 04F clra |
00FFF416 020FED bra dis2 |
disNotRel: |
00FFF418 0C1005 cmpb #NDX |
00FFF41A 026385 bne disNotNdx |
00FFF41C 0E6A00 ldb ,y+ |
00FFF41E 0C5800 bitb #$800 |
00FFF420 02601E bne disNot9 ; test for offset 9 mode |
00FFF422 034004 pshs b |
00FFF424 0C41FF andb #$1FF ; mask to offset bits |
00FFF426 04F clra ; |
00FFF427 0C5100 bitb #$100 ; test for negative offset |
00FFF429 027003 beq dis3 |
00FFF42B 04A deca ; sign extend offset |
00FFF42C 0CAE00 orb #$E00 |
dis3: |
00FFF42E 017FFEFBC lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF431 0C602C ldb #',' |
00FFF433 017FFF8DC lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF436 035004 puls b |
00FFF438 08D3F7 bsr disNdxReg |
00FFF43A 017FFF8D5 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF43D 0160003E1 lbra disNextLine |
disNot9: |
00FFF440 034004 pshs b |
00FFF442 0C5100 bitb #$100 ; check if indirect |
00FFF444 026005 bne dis4 |
00FFF446 0C605B ldb #'[' |
00FFF448 017FFF8C7 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis4: |
00FFF44B 0E6E04 ldb ,s ; get back b |
00FFF44D 0C400F andb #15 |
00FFF44F 026030 bne disNotRplus |
00FFF451 0E6E04 ldb ,s |
00FFF453 0C5080 bitb #$80 ; outer indexed? |
00FFF455 026005 bne dis5 |
00FFF457 0C605D ldb #']' |
00FFF459 017FFF8B6 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis5: |
00FFF45C 0C602C ldb #',' |
00FFF45E 017FFF8B1 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF461 0E6E04 ldb ,s |
00FFF463 08D3CC bsr disNdxReg |
00FFF465 017FFF8AA lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF468 0C602B ldb #'+' |
00FFF46A 017FFF8A5 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF46D 035004 puls b |
00FFF46F 0C5100 bitb #$100 |
00FFF471 1260003AD lbne disNextLine |
00FFF474 0C5080 bitb #$80 |
00FFF476 1260003A8 lbne disNextLine |
00FFF479 0C605D ldb #']' |
00FFF47B 017FFF894 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF47E 0160003A0 lbra disNextLine |
disNotRplus: |
00FFF481 0C1001 cmpb #1 |
00FFF483 026033 bne disNotRplusplus |
00FFF485 0E6E04 ldb ,s |
00FFF487 0C5080 bitb #$80 ; outer indexed? |
00FFF489 026005 bne dis6 |
00FFF48B 0C605D ldb #']' |
00FFF48D 017FFF882 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis6: |
00FFF490 0C602C ldb #',' |
00FFF492 017FFF87D lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF495 0E6E04 ldb ,s |
00FFF497 08D398 bsr disNdxReg |
00FFF499 017FFF876 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF49C 0C602B ldb #'+' |
00FFF49E 017FFF871 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF4A1 017FFF86E lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF4A4 035004 puls b |
00FFF4A6 0C5100 bitb #$100 |
00FFF4A8 126000376 lbne disNextLine |
00FFF4AB 0C5080 bitb #$80 |
00FFF4AD 126000371 lbne disNextLine |
00FFF4B0 0C605D ldb #']' |
00FFF4B2 017FFF85D lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF4B5 016000369 lbra disNextLine |
disNotRplusplus: |
00FFF4B8 0C1002 cmpb #2 |
00FFF4BA 026030 bne disNotRminus |
00FFF4BC 0E6E04 ldb ,s |
00FFF4BE 0C5080 bitb #$80 ; outer indexed? |
00FFF4C0 026005 bne dis7 |
00FFF4C2 0C605D ldb #']' |
00FFF4C4 017FFF84B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis7: |
00FFF4C7 0C602C ldb #',' |
00FFF4C9 017FFF846 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF4CC 0E6E04 ldb ,s |
00FFF4CE 08D361 bsr disNdxReg |
00FFF4D0 017FFF83F lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF4D3 0C602D ldb #'-' |
00FFF4D5 017FFF83A lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF4D8 035004 puls b |
00FFF4DA 0C5100 bitb #$100 |
00FFF4DC 126000342 lbne disNextLine |
00FFF4DF 0C5080 bitb #$80 |
00FFF4E1 12600033D lbne disNextLine |
00FFF4E4 0C605D ldb #']' |
00FFF4E6 017FFF829 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF4E9 016000335 lbra disNextLine |
disNotRminus: |
00FFF4EC 0C1003 cmpb #3 |
00FFF4EE 026033 bne disNotRminusminus |
00FFF4F0 0E6E04 ldb ,s |
00FFF4F2 0C5080 bitb #$80 ; outer indexed? |
00FFF4F4 026005 bne dis8 |
00FFF4F6 0C605D ldb #']' |
00FFF4F8 017FFF817 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis8: |
00FFF4FB 0C602C ldb #',' |
00FFF4FD 017FFF812 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF500 0E6E04 ldb ,s |
00FFF502 08D32D bsr disNdxReg |
00FFF504 017FFF80B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF507 0C602D ldb #'-' |
00FFF509 017FFF806 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF50C 017FFF803 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF50F 035004 puls b |
00FFF511 0C5100 bitb #$100 |
00FFF513 12600030B lbne disNextLine |
00FFF516 0C5080 bitb #$80 |
00FFF518 126000306 lbne disNextLine |
00FFF51B 0C605D ldb #']' |
00FFF51D 017FFF7F2 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF520 0160002FE lbra disNextLine |
disNotRminusminus: |
00FFF523 0C1004 cmpb #4 |
00FFF525 02602B bne disNotR |
00FFF527 0E6E04 ldb ,s |
00FFF529 0C5080 bitb #$80 ; outer indexed? |
00FFF52B 026005 bne dis9 |
00FFF52D 0C605D ldb #']' |
00FFF52F 017FFF7E0 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis9: |
00FFF532 0C602C ldb #',' |
00FFF534 017FFF7DB lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF537 0E6E04 ldb ,s |
00FFF539 08D2F6 bsr disNdxReg |
00FFF53B 017FFF7D4 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF53E 035004 puls b |
00FFF540 0C5100 bitb #$100 |
00FFF542 1260002DC lbne disNextLine |
00FFF545 0C5080 bitb #$80 |
00FFF547 1260002D7 lbne disNextLine |
00FFF54A 0C605D ldb #']' |
00FFF54C 017FFF7C3 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF54F 0160002CF lbra disNextLine |
disNotR: |
00FFF552 0C1005 cmpb #5 |
00FFF554 026038 bne disNotBOffs |
00FFF556 0C6042 ldb #'B' |
00FFF558 017FFF7B7 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF55B 0E6E04 ldb ,s |
00FFF55D 0C5080 bitb #$80 ; outer indexed? |
00FFF55F 026005 bne dis10 |
00FFF561 0C605D ldb #']' |
00FFF563 017FFF7AC lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis10: |
00FFF566 0C602C ldb #',' |
00FFF568 017FFF7A7 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF56B 0E6E04 ldb ,s |
00FFF56D 08D2C2 bsr disNdxReg |
00FFF56F 017FFF7A0 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF572 0C602D ldb #'-' |
00FFF574 017FFF79B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF577 017FFF798 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF57A 035004 puls b |
00FFF57C 0C5100 bitb #$100 |
00FFF57E 1260002A0 lbne disNextLine |
00FFF581 0C5080 bitb #$80 |
00FFF583 12600029B lbne disNextLine |
00FFF586 0C605D ldb #']' |
00FFF588 017FFF787 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF58B 016000293 lbra disNextLine |
disNotBOffs: |
00FFF58E 0C1006 cmpb #6 |
00FFF590 026038 bne disNotAOffs |
00FFF592 0C6041 ldb #'A' |
00FFF594 017FFF77B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF597 0E6E04 ldb ,s |
00FFF599 0C5080 bitb #$80 ; outer indexed? |
00FFF59B 026005 bne dis11 |
00FFF59D 0C605D ldb #']' |
00FFF59F 017FFF770 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis11: |
00FFF5A2 0C602C ldb #',' |
00FFF5A4 017FFF76B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5A7 0E6E04 ldb ,s |
00FFF5A9 08D286 bsr disNdxReg |
00FFF5AB 017FFF764 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5AE 0C602D ldb #'-' |
00FFF5B0 017FFF75F lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5B3 017FFF75C lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5B6 035004 puls b |
00FFF5B8 0C5100 bitb #$100 |
00FFF5BA 126000264 lbne disNextLine |
00FFF5BD 0C5080 bitb #$80 |
00FFF5BF 12600025F lbne disNextLine |
00FFF5C2 0C605D ldb #']' |
00FFF5C4 017FFF74B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5C7 016000257 lbra disNextLine |
disNotAOffs: |
00FFF5CA 0C1008 cmpb #8 |
00FFF5CC 026039 bne disNotBO |
00FFF5CE 0E6A00 ldb ,y+ |
00FFF5D0 01D sex |
00FFF5D1 017FFEE19 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5D4 0E6E04 ldb ,s |
00FFF5D6 0C5080 bitb #$80 ; outer indexed? |
00FFF5D8 026005 bne dis12 |
00FFF5DA 0C605D ldb #']' |
00FFF5DC 017FFF733 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis12: |
00FFF5DF 0C602C ldb #',' |
00FFF5E1 017FFF72E lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5E4 0E6E04 ldb ,s |
00FFF5E6 08D249 bsr disNdxReg |
00FFF5E8 017FFF727 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5EB 0C602D ldb #'-' |
00FFF5ED 017FFF722 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5F0 017FFF71F lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF5F3 035004 puls b |
00FFF5F5 0C5100 bitb #$100 |
00FFF5F7 126000227 lbne disNextLine |
00FFF5FA 0C5080 bitb #$80 |
00FFF5FC 126000222 lbne disNextLine |
00FFF5FF 0C605D ldb #']' |
00FFF601 017FFF70E lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF604 01600021A lbra disNextLine |
disNotBO: |
00FFF607 0C1009 cmpb #9 |
00FFF609 026038 bne disNotWO |
00FFF60B 0ECA01 ldd ,y++ |
00FFF60D 017FFEDDD lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF610 0E6E04 ldb ,s |
00FFF612 0C5080 bitb #$80 ; outer indexed? |
00FFF614 026005 bne dis13 |
00FFF616 0C605D ldb #']' |
00FFF618 017FFF6F7 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis13: |
00FFF61B 0C602C ldb #',' |
00FFF61D 017FFF6F2 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF620 0E6E04 ldb ,s |
00FFF622 08D20D bsr disNdxReg |
00FFF624 017FFF6EB lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF627 0C602D ldb #'-' |
00FFF629 017FFF6E6 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF62C 017FFF6E3 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF62F 035004 puls b |
00FFF631 0C5100 bitb #$100 |
00FFF633 1260001EB lbne disNextLine |
00FFF636 0C5080 bitb #$80 |
00FFF638 1260001E6 lbne disNextLine |
00FFF63B 0C605D ldb #']' |
00FFF63D 017FFF6D2 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF640 0160001DE lbra disNextLine |
disNotWO: |
00FFF643 0C100A cmpb #10 |
00FFF645 02603D bne disNotTO |
00FFF647 0E6A01 ldb ,y++ |
00FFF649 017FFEDAA lbsr DispByteAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF64C 0ECA01 ldd ,y++ |
00FFF64E 017FFED9C lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF651 0E6E04 ldb ,s |
00FFF653 0C5080 bitb #$80 ; outer indexed? |
00FFF655 026005 bne dis14 |
00FFF657 0C605D ldb #']' |
00FFF659 017FFF6B6 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis14: |
00FFF65C 0C602C ldb #',' |
00FFF65E 017FFF6B1 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF661 0E6E04 ldb ,s |
00FFF663 08D1CC bsr disNdxReg |
00FFF665 017FFF6AA lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF668 0C602D ldb #'-' |
00FFF66A 017FFF6A5 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF66D 017FFF6A2 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF670 035004 puls b |
00FFF672 0C5100 bitb #$100 |
00FFF674 1260001AA lbne disNextLine |
00FFF677 0C5080 bitb #$80 |
00FFF679 1260001A5 lbne disNextLine |
00FFF67C 0C605D ldb #']' |
00FFF67E 017FFF691 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF681 01600019D lbra disNextLine |
disNotTO: |
00FFF684 0C100B cmpb #11 |
00FFF686 026038 bne disNotDOffs |
00FFF688 0C6044 ldb #'D' |
00FFF68A 017FFF685 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF68D 0E6E04 ldb ,s |
00FFF68F 0C5080 bitb #$80 ; outer indexed? |
00FFF691 026005 bne dis15 |
00FFF693 0C605D ldb #']' |
00FFF695 017FFF67A lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis15: |
00FFF698 0C602C ldb #',' |
00FFF69A 017FFF675 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF69D 0E6E04 ldb ,s |
00FFF69F 08D190 bsr disNdxReg |
00FFF6A1 017FFF66E lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6A4 0C602D ldb #'-' |
00FFF6A6 017FFF669 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6A9 017FFF666 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6AC 035004 puls b |
00FFF6AE 0C5100 bitb #$100 |
00FFF6B0 12600016E lbne disNextLine |
00FFF6B3 0C5080 bitb #$80 |
00FFF6B5 126000169 lbne disNextLine |
00FFF6B8 0C605D ldb #']' |
00FFF6BA 017FFF655 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6BD 016000161 lbra disNextLine |
disNotDOffs: |
00FFF6C0 0C100C cmpb #12 |
00FFF6C2 026040 bne disNotPBO |
00FFF6C4 0E6A00 ldb ,y+ |
00FFF6C6 01D sex |
00FFF6C7 017FFED23 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6CA 0E6E04 ldb ,s |
00FFF6CC 0C5080 bitb #$80 ; outer indexed? |
00FFF6CE 026005 bne dis16 |
00FFF6D0 0C605D ldb #']' |
00FFF6D2 017FFF63D lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis16: |
00FFF6D5 0C602C ldb #',' |
00FFF6D7 017FFF638 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6DA 0E6E04 ldb ,s |
00FFF6DC 08D153 bsr disNdxReg |
00FFF6DE 0C6050 ldb #'P' |
00FFF6E0 017FFF62F lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6E3 0C6043 ldb #'C' |
00FFF6E5 017FFF62A lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6E8 0C602D ldb #'-' |
00FFF6EA 017FFF625 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6ED 017FFF622 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF6F0 035004 puls b |
00FFF6F2 0C5100 bitb #$100 |
00FFF6F4 12600012A lbne disNextLine |
00FFF6F7 0C5080 bitb #$80 |
00FFF6F9 126000125 lbne disNextLine |
00FFF6FC 0C605D ldb #']' |
00FFF6FE 017FFF611 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF701 01600011D lbra disNextLine |
disNotPBO: |
00FFF704 0C100D cmpb #13 |
00FFF706 02603F bne disNotPWO |
00FFF708 0ECA01 ldd ,y++ |
00FFF70A 017FFECE0 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF70D 0E6E04 ldb ,s |
00FFF70F 0C5080 bitb #$80 ; outer indexed? |
00FFF711 026005 bne dis17 |
00FFF713 0C605D ldb #']' |
00FFF715 017FFF5FA lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis17: |
00FFF718 0C602C ldb #',' |
00FFF71A 017FFF5F5 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF71D 0E6E04 ldb ,s |
00FFF71F 08D110 bsr disNdxReg |
00FFF721 0C6050 ldb #'P' |
00FFF723 017FFF5EC lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF726 0C6043 ldb #'C' |
00FFF728 017FFF5E7 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF72B 0C602D ldb #'-' |
00FFF72D 017FFF5E2 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF730 017FFF5DF lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF733 035004 puls b |
00FFF735 0C5100 bitb #$100 |
00FFF737 1260000E7 lbne disNextLine |
00FFF73A 0C5080 bitb #$80 |
00FFF73C 1260000E2 lbne disNextLine |
00FFF73F 0C605D ldb #']' |
00FFF741 017FFF5CE lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF744 0160000DA lbra disNextLine |
disNotPWO: |
00FFF747 0C100E cmpb #14 |
00FFF749 026044 bne disNotPTO |
00FFF74B 0E6A00 ldb ,y+ |
00FFF74D 017FFECA6 lbsr DispByteAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF750 0ECA01 ldd ,y++ |
00FFF752 017FFEC98 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF755 0E6E04 ldb ,s |
00FFF757 0C5080 bitb #$80 ; outer indexed? |
00FFF759 026005 bne dis18 |
00FFF75B 0C605D ldb #']' |
00FFF75D 017FFF5B2 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
dis18: |
00FFF760 0C602C ldb #',' |
00FFF762 017FFF5AD lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF765 0E6E04 ldb ,s |
00FFF767 08D0C8 bsr disNdxReg |
00FFF769 0C6050 ldb #'P' |
00FFF76B 017FFF5A4 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF76E 0C6043 ldb #'C' |
00FFF770 017FFF59F lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF773 0C602D ldb #'-' |
00FFF775 017FFF59A lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF778 017FFF597 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF77B 035004 puls b |
00FFF77D 0C5100 bitb #$100 |
00FFF77F 12600009F lbne disNextLine |
00FFF782 0C5080 bitb #$80 |
00FFF784 12600009A lbne disNextLine |
00FFF787 0C605D ldb #']' |
00FFF789 017FFF586 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF78C 016000092 lbra disNextLine |
disNotPTO: |
00FFF78F 0C605B ldb #'[' |
00FFF791 017FFF57E lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF794 0ECA01 ldd ,y++ |
00FFF796 017FFEC54 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF799 0C605D ldb #']' |
00FFF79B 017FFF574 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF79E 016000080 lbra disNextLine |
disNotNdx: |
00FFF7A1 0C1006 cmpb #EXT |
00FFF7A3 026008 bne disNotExt |
00FFF7A5 0ECA01 ldd ,y++ |
00FFF7A7 017FFEC43 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7AA 016000074 lbra disNextLine |
disNotExt: |
00FFF7AD 0C1003 cmpb #IMMB |
00FFF7AF 02600D bne disNotIMMB |
00FFF7B1 0C6023 ldb #'#' |
00FFF7B3 017FFF55C lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7B6 0E6A00 ldb ,y+ |
00FFF7B8 017FFEC3B lbsr DispByteAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7BB 016000063 lbra disNextLine |
disNotIMMB: |
00FFF7BE 0C1007 cmpb #IMMW |
00FFF7C0 02600C bne disNotIMMW |
00FFF7C2 0C6023 ldb #'#' |
00FFF7C4 017FFF54B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7C7 0ECA01 ldd ,y++ |
00FFF7C9 017FFEC21 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7CC 020053 bra disNextLine |
disNotIMMW: |
dis1: |
00FFF7CE 0C1121 cmpb #$121 |
00FFF7D0 025028 blo dis19 |
00FFF7D2 0C112F cmpb #$12F |
00FFF7D4 022024 bhi dis19 |
00FFF7D6 0C40FF andb #$FF |
00FFF7D8 08EFFEDB4 ldx #distbl1 |
00FFF7DB 058 aslb |
00FFF7DC 058 aslb |
00FFF7DD 03A abx |
00FFF7DE 0E6800 ldb ,x+ |
00FFF7E0 017FFF52F lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7E3 0E6800 ldb ,x+ |
00FFF7E5 017FFF52A lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7E8 0E6800 ldb ,x+ |
00FFF7EA 017FFF525 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7ED 0E6800 ldb ,x+ |
00FFF7EF 017FFF520 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7F2 0C6020 ldb #' ' |
00FFF7F4 017FFF51B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF7F7 016FFFC09 lbra dis21 |
*** warning 1: Long branch within short branch range could be optimized |
dis19: |
00FFF7FA 08E000000 ldx #0 |
dis24: |
00FFF7FD 0E180A000FFF2F4 cmpb distbl3,x |
00FFF802 026006 bne dis25 |
00FFF804 08EFFF314 ldx #distbl4 |
00FFF807 016FFFBC7 lbra dis23 |
*** warning 1: Long branch within short branch range could be optimized |
dis25: |
00FFF80A 030001 inx |
00FFF80C 08C00001F cmpx #31 |
00FFF80F 025FEC blo dis24 |
00FFF811 0C603F ldb #'?' |
00FFF813 017FFF4FC lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF816 017FFF4F9 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF819 017FFF4F6 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF81C 017FFF4F3 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF81F 020000 bra disNextLine |
disNextLine |
00FFF821 017FFD8AE lbsr CRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFF824 1BC000926 cmpy mon_r2+2 |
00FFF827 125FFFB93 lblo disLoop1 |
*** warning 1: Long branch within short branch range could be optimized |
00FFF82A 01600007F lbra Monitor |
|
disNdxRegs: |
00FFF82D 058059053055 fcb 'X','Y','S','U' |
disNdxReg: |
00FFF831 0C4600 andb #$600 |
00FFF833 059 rolb |
00FFF834 059 rolb |
00FFF835 059 rolb |
00FFF836 059 rolb |
00FFF837 04F clra |
00FFF838 034040 pshs u |
00FFF83A 01F003 tfr d,u |
00FFF83C 0A6C0A000FFF82D lda disNdxRegs,u |
00FFF841 035040 puls u |
00FFF843 01E089 exg a,b |
00FFF845 039 rts |
|
ASMO: |
00FFF846 034006 pshs d |
00FFF848 0CCFFF85A ldd #ASMOUTCH |
00FFF84B 0FD000800 std CharOutVec |
00FFF84E 035086 puls d,pc |
|
ASMOO: |
00FFF850 034006 pshs d |
00FFF852 0CCFFE2E1 ldd #DisplayChar |
00FFF855 0FD000800 std CharOutVec |
00FFF858 035086 puls d,pc |
|
ASMOUTCH: |
00FFF85A 0E7C00 stb ,u+ |
00FFF85C 039 rts |
|
DumpAsmbuf: |
00FFF85D 0CE000160 ldu #asmbuf |
dab2: |
00FFF860 0E6C00 ldb ,u+ |
00FFF862 027005 beq dab1 |
00FFF864 017FFF4AB lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF867 020FF7 bra dab2 |
dab1: |
00FFF869 039 rts |
|
;============================================================================== |
; System Monitor |
;============================================================================== |
; |
|
CmdPrompt: |
00FFF86A 017FFD865 lbsr CRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFF86D 0C6024 ldb #'$' |
00FFF86F 017FFF4A0 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF872 016FFF49D lbra OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
|
msgF09Starting: |
00FFF875 04606506D07406906B069 fcb "Femtiki F09 Multi-core OS Starting",CR,LF,0 |
00FFF87C 02004603003902004D075 |
00FFF883 06C07406902D06306F072 |
00FFF88A 06502004F053020053074 |
00FFF891 06107207406906E06700D |
00FFF898 00A000 |
|
MonitorStart: |
00FFF991 0CCFFFAEF ldd #HelpMsg |
00FFF994 08D9BE bsr DisplayString |
00FFF89A 0CCFFF875 ldd #msgF09Starting |
00FFF89D 017FFEB02 lbsr DisplayString |
*** warning 1: Long branch within short branch range could be optimized |
00FFF8A0 0CCFFFA78 ldd #HelpMsg |
00FFF8A3 017FFEAFC lbsr DisplayString |
*** warning 1: Long branch within short branch range could be optimized |
00FFF8A6 0CCFFF86A ldd #CmdPrompt |
00FFF8A9 0FD000808 std CmdPromptJI |
Monitor: |
00FFF996 03280F003FFF leas $3FFF ; reset stack pointer |
00FFF99A 05F clrb ; turn off keyboard echo |
00FFF99B 08DFE3 bsr SetKeyboardEcho |
00FFF8AC 03280F006FFF leas $6FFF ; reset stack pointer |
00FFF8B0 05F clrb ; turn off keyboard echo |
00FFF8B1 017FFF462 lbsr SetKeyboardEcho |
*** warning 1: Long branch within short branch range could be optimized |
; Reset IO vectors |
00FFF8B4 0CCFFEBE4 ldd #SerialPeekCharDirect |
00FFF8B7 0FD000804 std CharInVec |
00FFF8BA 0CCFFE2E1 ldd #DisplayChar |
00FFF8BD 0FD000800 std CharOutVec |
00FFF8C0 0CCFFF86A ldd #CmdPrompt |
00FFF8C3 0FD000808 std CmdPromptJI |
; jsr RequestIOFocus |
PromptLn: |
00FFF99D 017FFD732 lbsr CRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFF9A0 0C6024 ldb #'$' |
00FFF9A2 08DFD8 bsr OUTCH |
00FFF8C6 0AD90F000808 jsr [CmdPromptJI] |
|
; Get characters until a CR is keyed |
|
Prompt3: |
00FFF9A4 0CCFFFFFF ldd #-1 ; block until key present |
00FFF9A7 08DE92 bsr DBGGetKey |
00FFF9A9 0C100D cmpb #CR |
00FFF9AB 027004 beq Prompt1 |
00FFF9AD 08DFCD bsr OUTCH |
00FFF9AF 020FF3 bra Prompt3 |
00FFF8CA 0CCFFFFFF ldd #-1 ; block until key present |
00FFF8CD 017FFF40A lbsr INCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF8D0 0C100D cmpb #CR |
00FFF8D2 027005 beq Prompt1 |
00FFF8D4 017FFF43B lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFF8D7 020FF1 bra Prompt3 |
|
; Process the screen line that the CR was keyed on |
; |
Prompt1: |
00FFF9B1 0CC005050 ldd #$5050 |
00FFF9B4 0150FDFFFE60000 std LEDS |
00FFF9B9 0F6800000 ldb RunningID |
00FFF9BC 0C103D cmpb #61 |
00FFF9BE 022FE4 bhi Prompt3 |
00FFF9C0 0CC005151 ldd #$5151 |
00FFF9C3 0150FDFFFE60000 std LEDS |
00FFF9C8 00F111 clr CursorCol ; go back to the start of the line |
00FFF9CA 08D8AD bsr CalcScreenLoc ; calc screen memory location |
00FFF9CC 01F002 tfr d,y |
00FFF9CE 0CC005252 ldd #$5252 |
00FFF9D1 0150FDFFFE60000 std LEDS |
00FFF9D6 08D055 bsr MonGetNonSpace |
00FFF9D8 0C1024 cmpb #'$' |
00FFF9DA 026009 bne Prompt2 ; skip over '$' prompt character |
00FFF9DC 086353 lda #$5353 |
00FFF9DE 0150FDFFFE60000 std LEDS |
00FFF9E3 08D048 bsr MonGetNonSpace |
00FFF8D9 0CC005050 ldd #$5050 |
00FFF8DC 0150FDFFFE60001 std LEDS |
; ldb RunningID |
; cmpb #61 |
; bhi Prompt3 |
00FFF8E1 0CC005151 ldd #$5151 |
00FFF8E4 0150FDFFFE60001 std LEDS |
00FFF8E9 00F111 clr CursorCol ; go back to the start of the line |
00FFF8EB 017FFE9D0 lbsr CalcScreenLoc ; calc screen memory location |
*** warning 1: Long branch within short branch range could be optimized |
00FFF8EE 01F002 tfr d,y |
00FFF8F0 0CC005252 ldd #$5252 |
00FFF8F3 0150FDFFFE60001 std LEDS |
skipDollar: |
00FFF8F8 08D0AB bsr MonGetNonSpace |
00FFF8FA 0C1024 cmpb #'$' |
00FFF8FC 027FFA beq skipDollar ; skip over '$' prompt character |
00FFF8FE 086353 lda #$5353 |
00FFF900 0150FDFFFE60001 std LEDS |
|
; Dispatch based on command character |
; |
Prompt2: |
00FFF9E5 0C103F cmpb #'?' ; $? - display help |
00FFF9E7 026007 bne PromptC |
00FFF9E9 0CCFFFAEF ldd #HelpMsg |
00FFF9EC 08D966 bsr DisplayString |
00FFF9EE 020FA6 bra Monitor |
00FFF905 0C103C cmpb #'<' |
00FFF907 02602C bne PromptHelp |
00FFF909 08D095 bsr MonGetch |
00FFF90B 0C103E cmpb #'>' |
00FFF90D 026F9D bne Monitor |
00FFF90F 08D08F bsr MonGetch |
00FFF911 0C1073 cmpb #'s' |
00FFF913 02600E bne Prompt2a |
00FFF915 0CCFFEBE4 ldd #SerialPeekCharDirect |
00FFF918 0FD000804 std CharInVec |
00FFF91B 0CCFFEC08 ldd #SerialPutChar |
00FFF91E 0FD000800 std CharOutVec |
00FFF921 020F89 bra Monitor |
Prompt2a: |
00FFF923 0C1063 cmpb #'c' |
00FFF925 026F85 bne Monitor |
00FFF927 0CCFFEA12 ldd #GetKey |
00FFF92A 0FD000804 std CharInVec |
00FFF92D 0CCFFE2E1 ldd #DisplayChar |
00FFF930 0FD000800 std CharOutVec |
00FFF933 020F77 bra Monitor |
PromptHelp: |
00FFF935 0C103F cmpb #'?' ; $? - display help |
00FFF937 026008 bne PromptC |
00FFF939 0CCFFFA78 ldd #HelpMsg |
00FFF93C 017FFEA63 lbsr DisplayString |
*** warning 1: Long branch within short branch range could be optimized |
00FFF93F 020F6B bra Monitor |
PromptC: |
00FFF9F0 0C1043 cmpb #'C' |
00FFF9F2 026007 bne PromptD |
00FFF9F4 017FFF7D9 lbsr ClearScreen |
00FFF941 0C1043 cmpb #'C' |
00FFF943 026008 bne PromptD |
00FFF945 017FFE8C9 lbsr ClearScreen |
*** warning 1: Long branch within short branch range could be optimized |
00FFF9F7 08D848 bsr HomeCursor |
00FFF9F9 020F9B bra Monitor |
00FFF948 017FFE939 lbsr HomeCursor |
*** warning 1: Long branch within short branch range could be optimized |
00FFF94B 020F5F bra Monitor |
PromptD: |
00FFF9FB 0C1044 cmpb #'D' |
00FFF9FD 026008 bne PromptF |
00FFF9FF 08D027 bsr MonGetch |
00FFFA01 0C1052 cmpb #'R' |
00FFFA03 026F9F bne Prompt3 |
00FFFA05 020193 bra DumpRegs |
00FFF94D 0C1044 cmpb #'D' |
00FFF94F 026008 bne PromptF |
00FFF951 08D04D bsr MonGetch |
00FFF953 0C1052 cmpb #'R' |
00FFF955 02621A bne DumpMemory |
00FFF957 020274 bra DumpRegs |
PromptF: |
00FFFA07 0C1046 cmpb #'F' |
00FFFA09 02600F bne PromptJ |
00FFFA0B 08D01B bsr MonGetch |
00FFFA0D 0C1049 cmpb #'I' |
00FFFA0F 026F85 bne Monitor |
00FFFA11 08D015 bsr MonGetch |
00FFFA13 0C1047 cmpb #'G' |
00FFFA15 026F7F bne Monitor |
00FFFA17 07EFE0000 jmp $FE0000 |
00FFF959 0C1046 cmpb #'F' |
00FFF95B 02600F bne PromptJ |
00FFF95D 08D041 bsr MonGetch |
00FFF95F 0C1049 cmpb #'I' |
00FFF961 026F49 bne Monitor |
00FFF963 08D03B bsr MonGetch |
00FFF965 0C1047 cmpb #'G' |
00FFF967 026F43 bne Monitor |
00FFF969 07EFE0000 jmp $FE0000 |
PromptJ: |
00FFFA1A 0C104A cmpb #'J' |
00FFFA1C 1270001BF lbeq jump_to_code |
00FFF96C 0C104A cmpb #'J' |
00FFF96E 1270002A7 lbeq jump_to_code |
PromptR: |
00FFFA1F 0C1052 cmpb #'R' |
00FFFA21 026F73 bne Monitor |
00FFFA23 017FFE5DA lbsr ramtest |
00FFF971 0C1052 cmpb #'R' |
00FFF973 026006 bne Prompt_s |
00FFF975 0CEFFF8AC ldu #Monitor |
00FFF978 016FFDA85 lbra ramtest |
*** warning 1: Long branch within short branch range could be optimized |
00FFFA26 020F6E bra Monitor |
Prompt_s: |
00FFF97B 0C1073 cmpb #'s' |
00FFF97D 026005 bne PromptT |
00FFF97F 017FFF323 lbsr SerialOutputTest |
*** warning 1: Long branch within short branch range could be optimized |
00FFF982 020F28 bra Monitor |
PromptT: |
00FFF984 0C1054 cmpb #'T' |
00FFF986 026011 bne PromptU |
00FFF988 08D016 bsr MonGetch |
00FFF98A 0C1049 cmpb #'I' |
00FFF98C 026F1E bne Monitor |
00FFF98E 08D010 bsr MonGetch |
00FFF990 0C1052 cmpb #'R' |
00FFF992 026F18 bne Monitor |
00FFF994 017FFEB1C lbsr rtc_read |
*** warning 1: Long branch within short branch range could be optimized |
00FFF997 020F13 bra Monitor |
PromptU: |
00FFF999 0C1055 cmpb #'U' |
00FFF99B 026F0F bne Monitor |
00FFF99D 016FFFA14 lbra disassem |
*** warning 1: Long branch within short branch range could be optimized |
|
MonGetch: |
00FFFA28 0E6A04 ldb ,y |
00FFFA2A 031201 leay 1,y |
00FFFA2C 039 rts |
00FFF9A0 0E6A04 ldb ,y |
00FFF9A2 031201 iny |
00FFF9A4 039 rts |
|
MonGetNonSpace: |
00FFFA2D 08DFF9 bsr MonGetCh |
00FFFA2F 0C1020 cmpb #' ' |
00FFFA31 027FFA beq MonGetNonSpace |
00FFFA33 0C1009 cmpb #9 ; tab |
00FFFA35 027FF6 beq MonGetNonSpace |
00FFFA37 039 rts |
00FFF9A5 08DFF9 bsr MonGetCh |
00FFF9A7 0C1020 cmpb #' ' |
00FFF9A9 027FFA beq MonGetNonSpace |
00FFF9AB 039 rts |
|
;------------------------------------------------------------------------------ |
; Ignore blanks in the input |
1883,80 → 4076,82
; |
ignBlanks: |
ignBlanks1: |
00FFFA38 08DFEE bsr MonGetch |
00FFFA3A 0C1020 cmpb #' ' |
00FFFA3C 027FFA beq ignBlanks1 |
00FFFA3E 0313FF leay -1,y |
00FFFA40 039 rts |
00FFF9AC 08DFF2 bsr MonGetch |
00FFF9AE 0C1020 cmpb #' ' |
00FFF9B0 027FFA beq ignBlanks1 |
00FFF9B2 0313FF dey |
00FFF9B4 039 rts |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
GetTwoParams: |
00FFFA41 08DFF5 bsr ignBlanks |
00FFFA43 08D02E bsr GetHexNumber ; get start address of dump |
00FFFA45 0DC910 ldd mon_numwka |
00FFFA47 0DD920 std mon_r1 |
00FFFA49 0DC912 ldd mon_numwka+2 |
00FFFA4B 0DD922 std mon_r1+2 |
00FFFA4D 08DFE9 bsr ignBlanks |
00FFFA4F 08D022 bsr GetHexNumber ; get end address of dump |
00FFFA51 0DC910 ldd mon_numwka |
00FFFA53 0DD922 std mon_r2 |
00FFFA55 0DC912 ldd mon_numwka+2 |
00FFFA57 0DD924 std mon_r2+2 |
00FFFA59 039 rts |
00FFF9B5 08DFF5 bsr ignBlanks |
00FFF9B7 08D03F bsr GetHexNumber ; get start address of dump |
00FFF9B9 0FC000910 ldd mon_numwka |
00FFF9BC 0FD000920 std mon_r1 |
00FFF9BF 0FC000912 ldd mon_numwka+2 |
00FFF9C2 0FD000922 std mon_r1+2 |
00FFF9C5 08DFE5 bsr ignBlanks |
00FFF9C7 08D02F bsr GetHexNumber ; get end address of dump |
00FFF9C9 0FC000910 ldd mon_numwka |
00FFF9CC 0FD000924 std mon_r2 |
00FFF9CF 0FC000912 ldd mon_numwka+2 |
00FFF9D2 0FD000926 std mon_r2+2 |
00FFF9D5 039 rts |
|
;------------------------------------------------------------------------------ |
; Get a range, the end must be greater or equal to the start. |
;------------------------------------------------------------------------------ |
GetRange: |
00FFFA5A 08DFE5 bsr GetTwoParams |
00FFFA5C 0DC924 ldd mon_r2+2 |
00FFFA5E 093922 subd mon_r1+2 |
00FFFA60 0DC922 ldd mon_r2 |
00FFFA62 0D2921 sbcb mon_r1+1 |
00FFFA64 092920 sbca mon_r1 |
00FFFA66 12500006C lbcs DisplayErr |
00FFFA69 039 rts |
00FFF9D6 08DFDD bsr GetTwoParams |
00FFF9D8 0FC000926 ldd mon_r2+2 |
00FFF9DB 0B3000922 subd mon_r1+2 |
00FFF9DE 0FC000924 ldd mon_r2 |
00FFF9E1 0F2000921 sbcb mon_r1+1 |
00FFF9E4 0B2000920 sbca mon_r1 |
00FFF9E7 125000074 lbcs DisplayErr |
00FFF9EA 039 rts |
|
shl_numwka: |
00FFFA6A 008913 asl mon_numwka+3 |
00FFFA6C 009912 rol mon_numwka+2 |
00FFFA6E 009911 rol mon_numwka+1 |
00FFFA70 009910 rol mon_numwka |
00FFFA72 039 rts |
00FFF9EB 078000913 asl mon_numwka+3 |
00FFF9EE 079000912 rol mon_numwka+2 |
00FFF9F1 079000911 rol mon_numwka+1 |
00FFF9F4 079000910 rol mon_numwka |
00FFF9F7 039 rts |
|
;------------------------------------------------------------------------------ |
; Get a hexidecimal number. Maximum of nine digits. |
; Y = text pointer (updated) |
; D = number of digits |
; mon_numwka contains number |
; Get a hexidecimal number. Maximum of twelve digits. |
; |
; Modifies: |
; Y = text pointer (updated) |
; D = number of digits |
; mon_numwka contains number |
;------------------------------------------------------------------------------ |
; |
GetHexNumber: |
00FFFA73 04F05F clrd |
00FFFA75 0DD910 std mon_numwka |
00FFFA77 0DD912 std mon_numwka+2 |
00FFFA79 034010 pshs x |
00FFFA7B 08E000000 ldx #0 ; max 9 eight digits |
00FFF9F8 04F05F clrd |
00FFF9FA 0FD000910 std mon_numwka ; zero out work area |
00FFF9FD 0FD000912 std mon_numwka+2 |
00FFFA00 034010 pshs x |
00FFFA02 08E000000 ldx #0 ; max 12 eight digits |
gthxn2: |
00FFFA7E 08DFA8 bsr MonGetch |
00FFFA80 08D01D bsr AsciiToHexNybble |
00FFFA82 0C1FFF cmpb #-1 |
00FFFA84 027015 beq gthxn1 |
00FFFA86 08DFE2 bsr shl_numwka |
00FFFA88 08DFE0 bsr shl_numwka |
00FFFA8A 08DFDE bsr shl_numwka |
00FFFA8C 08DFDC bsr shl_numwka |
00FFFA8E 0C400F andb #$0f |
00FFFA90 0DA913 orb mon_numwka+3 |
00FFFA92 0D7913 stb mon_numwka+3 |
00FFFA94 030001 inx |
00FFFA96 08C000009 cmpx #9 |
00FFFA99 025FE3 blo gthxn2 |
00FFFA05 08DF99 bsr MonGetch |
00FFFA07 08D01F bsr AsciiToHexNybble |
00FFFA09 0C1FFF cmpb #-1 |
00FFFA0B 027017 beq gthxn1 |
00FFFA0D 08DFDC bsr shl_numwka |
00FFFA0F 08DFDA bsr shl_numwka |
00FFFA11 08DFD8 bsr shl_numwka |
00FFFA13 08DFD6 bsr shl_numwka |
00FFFA15 0C400F andb #$0f |
00FFFA17 0FA000913 orb mon_numwka+3 |
00FFFA1A 0F7000913 stb mon_numwka+3 |
00FFFA1D 030001 inx |
00FFFA1F 08C00000C cmpx #12 |
00FFFA22 025FE1 blo gthxn2 |
gthxn1: |
00FFFA9B 01F010 tfr x,d |
00FFFA9D 035090 puls x,pc |
00FFFA24 01F010 tfr x,d |
00FFFA26 035090 puls x,pc |
|
;GetDecNumber: |
; phx |
1987,383 → 4182,563
;------------------------------------------------------------------------------ |
; |
AsciiToHexNybble: |
00FFFA9F 0C1030 cmpb #'0' |
00FFFAA1 024021 bcc gthx3 |
00FFFAA3 0C103A cmpb #'9'+1 |
00FFFAA5 025003 bcs gthx5 |
00FFFAA7 0C0030 subb #'0' |
00FFFAA9 039 rts |
00FFFA28 0C1030 cmpb #'0' |
00FFFA2A 025021 blo gthx3 |
00FFFA2C 0C1039 cmpb #'9' |
00FFFA2E 022003 bhi gthx5 |
00FFFA30 0C0030 subb #'0' |
00FFFA32 039 rts |
gthx5: |
00FFFAAA 0C1041 cmpb #'A' |
00FFFAAC 024016 bcc gthx3 |
00FFFAAE 0C1047 cmpb #'F'+1 |
00FFFAB0 025005 bcs gthx6 |
00FFFAB2 0C0041 subb #'A' |
00FFFAB4 0CB00A addb #10 |
00FFFAB6 039 rts |
00FFFA33 0C1041 cmpb #'A' |
00FFFA35 025016 blo gthx3 |
00FFFA37 0C1046 cmpb #'F' |
00FFFA39 022005 bhi gthx6 |
00FFFA3B 0C0041 subb #'A' |
00FFFA3D 0CB00A addb #10 |
00FFFA3F 039 rts |
gthx6: |
00FFFAB7 0C1061 cmpb #'a' |
00FFFAB9 024009 bcc gthx3 |
00FFFABB 0C107B cmpb #'z'+1 |
00FFFABD 025005 bcs gthx3 |
00FFFABF 0C0061 subb #'a' |
00FFFAC1 0CB00A addb #10 |
00FFFAC3 039 rts |
00FFFA40 0C1061 cmpb #'a' |
00FFFA42 025009 blo gthx3 |
00FFFA44 0C107A cmpb #'z' |
00FFFA46 022005 bhi gthx3 |
00FFFA48 0C0061 subb #'a' |
00FFFA4A 0CB00A addb #10 |
00FFFA4C 039 rts |
gthx3: |
00FFFAC4 0C6FFF ldb #-1 ; not a hex number |
00FFFAC6 039 rts |
00FFFA4D 0C6FFF ldb #-1 ; not a hex number |
00FFFA4F 039 rts |
|
AsciiToDecNybble: |
00FFFAC7 0C1030 cmpb #'0' |
00FFFAC9 024007 bcc gtdc3 |
00FFFACB 0C103A cmpb #'9'+1 |
00FFFACD 025003 bcs gtdc3 |
00FFFACF 0C0030 subb #'0' |
00FFFAD1 039 rts |
00FFFA50 0C1030 cmpb #'0' |
00FFFA52 024007 bcc gtdc3 |
00FFFA54 0C103A cmpb #'9'+1 |
00FFFA56 025003 bcs gtdc3 |
00FFFA58 0C0030 subb #'0' |
00FFFA5A 039 rts |
gtdc3: |
00FFFAD2 0C6FFF ldb #-1 |
00FFFAD4 039 rts |
00FFFA5B 0C6FFF ldb #-1 |
00FFFA5D 039 rts |
|
DisplayErr: |
00FFFAD5 08EFFFAE7 ldx #msgErr |
00FFFAD8 04F05F clrd |
00FFFADA 08D003 bsr DisplayStringDX |
00FFFADC 07EFFF996 jmp Monitor |
00FFFA5E 08EFFFA70 ldx #msgErr |
00FFFA61 04F05F clrd |
00FFFA63 08D003 bsr DisplayStringDX |
00FFFA65 07EFFF8AC jmp Monitor |
|
DisplayStringDX |
00FFFADF 0DD024 std Strptr |
00FFFAE1 09F026 stx Strptr+2 |
00FFFAE3 0BDFFF354 jsr DisplayString |
00FFFAE6 039 rts |
00FFFA68 0DD024 std Strptr |
00FFFA6A 09F026 stx Strptr+2 |
00FFFA6C 0BDFFE3A2 jsr DisplayString |
00FFFA6F 039 rts |
|
msgErr: |
00FFFAE7 02A02A04507207200D00A fcb "**Err",CR,LF,0 |
00FFFAEE 000 |
00FFFA70 02A02A04507207200D00A fcb "**Err",CR,LF,0 |
00FFFA77 000 |
|
HelpMsg: |
00FFFAEF 03F02003D020044069073 fcb "? = Display help",CR,LF |
00FFFAF6 07006C061079020068065 |
00FFFAFD 06C07000D00A |
00FFFB01 04304C05302003D020063 fcb "CLS = clear screen",CR,LF |
00FFFB08 06C065061072020073063 |
00FFFB0F 07206506506E00D00A |
00FFFA78 03F02003D020044069073 fcb "? = Display help",CR,LF |
00FFFA7F 07006C061079020068065 |
00FFFA86 06C07000D00A |
00FFFA8A 04304C05302003D020063 fcb "CLS = clear screen",CR,LF |
00FFFA91 06C065061072020073063 |
00FFFA98 07206506506E00D00A |
; db "S = Boot from SD Card",CR,LF |
; db ": = Edit memory bytes",CR,LF |
; db "L = Load sector",CR,LF |
; db "W = Write sector",CR,LF |
00FFFB15 04405202003D020044075 fcb "DR = Dump registers",CR,LF |
00FFFB1C 06D070020072065067069 |
00FFFB23 07307406507207300D00A |
; db "D = Dump memory",CR,LF |
00FFFA9E 04405202003D020044075 fcb "DR = Dump registers",CR,LF |
00FFFAA5 06D070020072065067069 |
00FFFAAC 07307406507207300D00A |
00FFFAB3 04402003D02004407506D fcb "D = Dump memory",CR,LF |
00FFFABA 07002006D06506D06F072 |
00FFFAC1 07900D00A |
; db "F = Fill memory",CR,LF |
; db "FL = Dump I/O Focus List",CR,LF |
00FFFB2A 04604904702003D020073 fcb "FIG = start FIG Forth",CR,LF |
00FFFB31 074061072074020046049 |
00FFFB38 04702004606F072074068 |
00FFFB3F 00D00A |
00FFFAC4 04604904702003D020073 fcb "FIG = start FIG Forth",CR,LF |
00FFFACB 074061072074020046049 |
00FFFAD2 04702004606F072074068 |
00FFFAD9 00D00A |
; db "KILL n = kill task #n",CR,LF |
; db "B = start tiny basic",CR,LF |
; db "b = start EhBasic 6502",CR,LF |
00FFFB41 04A02003D02004A07506D fcb "J = Jump to code",CR,LF |
00FFFB48 07002007406F02006306F |
00FFFB4F 06406500D00A |
00FFFB53 05204104D02003D020074 fcb "RAM = test RAM",CR,LF |
00FFFB5A 06507307402005204104D |
00FFFB61 00D00A |
00FFFADB 04A02003D02004A07506D fcb "J = Jump to code",CR,LF |
00FFFAE2 07002007406F02006306F |
00FFFAE9 06406500D00A |
00FFFAED 05204104D02003D020074 fcb "RAM = test RAM",CR,LF |
00FFFAF4 06507307402005204104D |
00FFFAFB 00D00A |
; db "R[n] = Set register value",CR,LF |
; db "r = random lines - test bitmap",CR,LF |
; db "e = ethernet test",CR,LF |
00FFFAFD 07302003D020073065072 fcb "s = serial output test",CR,LF |
00FFFB04 06906106C02006F075074 |
00FFFB0B 070075074020074065073 |
00FFFB12 07400D00A |
; db "T = Dump task list",CR,LF |
; db "TO = Dump timeout list",CR,LF |
; db "TI = display date/time",CR,LF |
00FFFB15 05404902003D020064069 fcb "TI = display date/time",CR,LF |
00FFFB1C 07307006C061079020064 |
00FFFB23 06107406502F07406906D |
00FFFB2A 06500D00A |
; db "TEMP = display temperature",CR,LF |
; db "P = Piano",CR,LF,0 |
00FFFB63 000 fcb 0 |
00FFFB2D 000 fcb 0 |
|
msgRegHeadings |
00FFFB64 00D00A02004402F041042 fcb CR,LF," D/AB X Y U S PC DP CCR",CR,LF,0 |
00FFFB6B 020020020058020020020 |
00FFFB72 020059020020020020055 |
00FFFB79 020020020020053020020 |
00FFFB80 020020020050043020020 |
00FFFB87 020020044050020043043 |
00FFFB8E 05200D00A000 |
00FFFB2E 00D00A02002004402F041 fcb CR,LF," D/AB X Y U S PC DP CCR",CR,LF,0 |
00FFFB35 042020020020020020058 |
00FFFB3C 020020020020020020059 |
00FFFB43 020020020020020020055 |
00FFFB4A 020020020020020020053 |
00FFFB51 020020020020020020020 |
00FFFB58 050043020020020020044 |
00FFFB5F 05002002004304305200D |
00FFFB66 00A000 |
|
nHEX4: |
00FFFB92 0BDFFD2D2 jsr HEX4 |
00FFFB95 039 rts |
00FFFB68 0BDFFD2D2 jsr HEX4 |
00FFFB6B 039 rts |
|
nXBLANK: |
00FFFB96 0C6020 ldb #' ' |
00FFFB98 020DE2 bra OUTCH |
00FFFB6C 0C6020 ldb #' ' |
00FFFB6E 016FFF1A1 lbra OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
|
DumpRegs |
00FFFB9A 08EFFFB64 ldx #msgRegHeadings |
00FFFB9D 0CC0000FF ldd #msgRegHeadings>>16 |
00FFFBA0 0BDFFFADF jsr DisplayStringDX |
00FFFBA3 08DFF1 bsr nXBLANK |
00FFFBA5 0DC900 ldd mon_DSAVE |
00FFFBA7 08DFE9 bsr nHEX4 |
00FFFBA9 08DFEB bsr nXBLANK |
00FFFBAB 0DC902 ldd mon_XSAVE |
00FFFBAD 08DFE3 bsr nHEX4 |
00FFFBAF 08DFE5 bsr nXBLANK |
00FFFBB1 0DC904 ldd mon_YSAVE |
00FFFBB3 08DFDD bsr nHEX4 |
00FFFBB5 08DFDF bsr nXBLANK |
00FFFBB7 0DC906 ldd mon_USAVE |
00FFFBB9 08DFD7 bsr nHEX4 |
00FFFBBB 08DFD9 bsr nXBLANK |
00FFFBBD 0DC908 ldd mon_SSAVE |
00FFFBBF 08DFD1 bsr nHEX4 |
00FFFBC1 08DFD3 bsr nXBLANK |
00FFFBC3 0DC90A ldd mon_PCSAVE |
00FFFBC5 08DFCB bsr nHEX4 |
00FFFBC7 0DC90C ldd mon_PCSAVE+2 |
00FFFBC9 08DFC7 bsr nHEX4 |
00FFFBCB 08DFC9 bsr nXBLANK |
00FFFBCD 0DC90E ldd mon_DPRSAVE |
00FFFBCF 0BDFFD2CE jsr HEX2 |
00FFFBD2 08DFC2 bsr nXBLANK |
00FFFBD4 09690F lda mon_CCRSAVE |
00FFFBD6 0BDFFD2CE jsr HEX2 |
00FFFBD9 08DFBB bsr nXBLANK |
00FFFBDB 07EFFF996 jmp Monitor |
;------------------------------------------------------------------------------ |
; Dump Memory |
; |
; Usage: |
; $D FFFC12 8 |
; |
; Dump formatted to look like: |
; :FFFC12 012 012 012 012 555 666 777 888 |
; |
;------------------------------------------------------------------------------ |
|
DumpMemory: |
00FFFB71 08DE42 bsr GetTwoParams |
00FFFB73 18E000000 ldy #0 |
00FFFB76 1BE000922 ldy mon_r1+2 |
dmpm2: |
00FFFB79 017FFD556 lbsr CRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFFB7C 0C603A ldb #':' |
00FFFB7E 017FFF191 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFFB81 01F020 tfr y,d |
;addd mon_r1+2 ; output the address |
00FFFB83 017FFE867 lbsr DispWordAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFFB86 0C6020 ldb #' ' |
00FFFB88 017FFF187 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFFB8B 08E000008 ldx #8 ; number of bytes to display |
dmpm1: |
; ldb far [mon_r1+1],y |
;ldb [mon_r1+2],y |
00FFFB8E 0E6A04 ldb ,y |
00FFFB90 031201 iny |
00FFFB92 017FFE861 lbsr DispByteAsHex ; display byte |
*** warning 1: Long branch within short branch range could be optimized |
00FFFB95 0C6020 ldb #' ' ; followed by a space |
00FFFB97 017FFF178 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFFB9A 05F clrb |
00FFFB9B 04F clra |
00FFFB9C 017FFF13B lbsr INCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFFB9F 0C1003 cmpb #CTRLC |
00FFFBA1 027024 beq dmpm3 |
00FFFBA3 0301FF dex |
00FFFBA5 026FE7 bne dmpm1 |
; Now output ascii |
00FFFBA7 0C6020 ldb #' ' |
00FFFBA9 017FFF166 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFFBAC 08E000008 ldx #8 ; 8 chars to output |
00FFFBAF 0313F8 leay -8,y ; backup pointer |
dmpm5: |
; ldb far [mon_r1+1],y ; get the char |
; ldb [mon_r1+2],y ; get the char |
00FFFBB1 0E6A04 ldb ,y |
00FFFBB3 0C1020 cmpb #$20 ; is it a control char? |
00FFFBB5 024002 bhs dmpm4 |
00FFFBB7 0C602E ldb #'.' |
dmpm4: |
00FFFBB9 017FFF156 lbsr OUTCH |
*** warning 1: Long branch within short branch range could be optimized |
00FFFBBC 031201 iny |
00FFFBBE 0301FF dex |
00FFFBC0 026FEF bne dmpm5 |
00FFFBC2 1BC000926 cmpy mon_r2+2 |
00FFFBC5 025FB2 blo dmpm2 |
dmpm3: |
00FFFBC7 017FFD508 lbsr CRLF |
*** warning 1: Long branch within short branch range could be optimized |
00FFFBCA 016FFFCDF lbra Monitor |
*** warning 1: Long branch within short branch range could be optimized |
|
;------------------------------------------------------------------------------ |
; Dump Registers |
; |
; Usage: |
; $DR |
;------------------------------------------------------------------------------ |
|
DumpRegs: |
00FFFBCD 0CCFFFB2E ldd #msgRegHeadings |
00FFFBD0 017FFE7CF lbsr DisplayString |
*** warning 1: Long branch within short branch range could be optimized |
00FFFBD3 08DF97 bsr nXBLANK |
00FFFBD5 0FC000900 ldd mon_DSAVE |
00FFFBD8 08DF8E bsr nHEX4 |
00FFFBDA 08DF90 bsr nXBLANK |
00FFFBDC 0FC000902 ldd mon_XSAVE |
00FFFBDF 08DF87 bsr nHEX4 |
00FFFBE1 08DF89 bsr nXBLANK |
00FFFBE3 0FC000904 ldd mon_YSAVE |
00FFFBE6 08DF80 bsr nHEX4 |
00FFFBE8 08DF82 bsr nXBLANK |
00FFFBEA 0FC000906 ldd mon_USAVE |
00FFFBED 08DF79 bsr nHEX4 |
00FFFBEF 08DF7B bsr nXBLANK |
00FFFBF1 0FC000908 ldd mon_SSAVE |
00FFFBF4 08DF72 bsr nHEX4 |
00FFFBF6 08DF74 bsr nXBLANK |
00FFFBF8 0F600090B ldb mon_PCSAVE+1 |
00FFFBFB 017FFE7F8 lbsr DispByteAsHex |
*** warning 1: Long branch within short branch range could be optimized |
00FFFBFE 0FC00090C ldd mon_PCSAVE+2 |
00FFFC01 08DF65 bsr nHEX4 |
00FFFC03 08DF67 bsr nXBLANK |
00FFFC05 0FC00090E ldd mon_DPRSAVE |
00FFFC08 0BDFFD2CE jsr HEX2 |
00FFFC0B 08DF5F bsr nXBLANK |
00FFFC0D 0B600090F lda mon_CCRSAVE |
00FFFC10 017FFD6BB lbsr HEX2 |
*** warning 1: Long branch within short branch range could be optimized |
00FFFC13 08DF57 bsr nXBLANK |
00FFFC15 016FFFC94 lbra Monitor |
*** warning 1: Long branch within short branch range could be optimized |
|
;------------------------------------------------------------------------------ |
; Jump to code |
; |
; Registers are loaded with values from the monitor register save area before |
; the code is jumped to. |
; |
; J <address> |
;------------------------------------------------------------------------------ |
|
jump_to_code: |
00FFFBDE 08DE93 bsr GetHexNumber |
00FFFBE0 01A010 sei |
00FFFBE2 1DE908 lds mon_SSAVE |
00FFFBE4 0CCFFFC11 ldd #<jtc_exit |
00FFFBE7 034006 pshs d |
00FFFBE9 0CC000000 ldd #>jtc_exit |
00FFFBEC 034004 pshs b |
00FFFBEE 0DC912 ldd mon_numwka+2 |
00FFFBF0 034006 pshs d |
00FFFBF2 0DC910 ldd mon_numwka |
00FFFBF4 034006 pshs d |
00FFFBF6 0DC906 ldd mon_USAVE |
00FFFBF8 034006 pshs d |
00FFFBFA 0DC904 ldd mon_YSAVE |
00FFFBFC 034006 pshs d |
00FFFBFE 0DC902 ldd mon_XSAVE |
00FFFC00 034006 pshs d |
00FFFC02 09690E lda mon_DPRSave |
00FFFC04 034002 pshs a |
00FFFC06 0DC900 ldd mon_DSAVE |
00FFFC08 034006 pshs d |
00FFFC0A 09690F lda mon_CCRSAVE |
00FFFC0C 034002 pshs a |
00FFFC0E 0150350FF puls far ccr,d,dpr,x,y,u,pc |
00FFFC18 08DDDE bsr GetHexNumber |
00FFFC1A 01A010 sei |
00FFFC1C 1FE000908 lds mon_SSAVE |
00FFFC1F 0CCFFFC53 ldd #<jtc_exit |
00FFFC22 034006 pshs d |
00FFFC24 0C6000 ldb #>jtc_exit |
00FFFC26 034004 pshs b |
00FFFC28 0FC000912 ldd mon_numwka+2 |
00FFFC2B 034006 pshs d |
00FFFC2D 0F6000911 ldb mon_numwka+1 |
00FFFC30 034004 pshs b |
00FFFC32 0FC000906 ldd mon_USAVE |
00FFFC35 034006 pshs d |
00FFFC37 0FC000904 ldd mon_YSAVE |
00FFFC3A 034006 pshs d |
00FFFC3C 0FC000902 ldd mon_XSAVE |
00FFFC3F 034006 pshs d |
00FFFC41 0B600090E lda mon_DPRSave |
00FFFC44 034002 pshs a |
00FFFC46 0FC000900 ldd mon_DSAVE |
00FFFC49 034006 pshs d |
00FFFC4B 0B600090F lda mon_CCRSAVE |
00FFFC4E 034002 pshs a |
00FFFC50 0150350FF puls far ccr,d,dpr,x,y,u,pc |
jtc_exit: |
00FFFC11 034001 pshs ccr |
00FFFC13 0DD900 std mon_DSAVE |
00FFFC15 09F902 stx mon_XSAVE |
00FFFC17 19F904 sty mon_YSAVE |
00FFFC19 0DF906 stu mon_USAVE |
00FFFC1B 01F0B8 tfr dpr,a |
00FFFC1D 09790E sta mon_DPRSAVE |
00FFFC1F 035002 puls a |
00FFFC21 09790F sta mon_CCRSAVE |
00FFFC23 1DF908 sts mon_SSAVE |
00FFFC25 1CE003FFF lds #$3FFF |
00FFFC53 1FF000908 sts >mon_SSAVE ; need to use extended addressing, no direct page setting |
00FFFC56 03280F006FFF leas $6FFF ; reset stack to system area, dont modify flags register! |
00FFFC5A 034001 pshs ccr ; now the stack can be used |
00FFFC5C 034002 pshs a ; save acca register so we can use it |
00FFFC5E 01F0B8 tfr dpr,a ; a = outgoing dpr value |
00FFFC60 0B700090E sta >mon_DPRSAVE ; force extended addressing mode usage here dpr is not set |
00FFFC63 04F clra ; dpg register must be set to zero before values are |
00FFFC64 01F08B tfr a,dpr ; saved in the monitor register save area. |
00FFFC66 035002 puls a ; get back acca |
00FFFC68 0FD000900 std mon_DSAVE ; save regsters, can use direct addressing now |
00FFFC6B 0BF000902 stx mon_XSAVE |
00FFFC6E 1BF000904 sty mon_YSAVE |
00FFFC71 0FF000906 stu mon_USAVE |
00FFFC74 035002 puls a ; get back ccr |
00FFFC76 0B700090F sta mon_CCRSAVE ; and save it too |
; Reset vectors in case they got toasted. |
00FFFC79 0CCFFEBE4 ldd #SerialPeekCharDirect |
00FFFC7C 0FD000804 std CharInVec |
00FFFC7F 0CCFFE2E1 ldd #DisplayChar |
00FFFC82 0FD000800 std CharOutVec |
; todo set according to coreid |
00FFFC28 07EFFFB9A jmp DumpRegs |
00FFFC85 016FFFF45 lbra DumpRegs ; now go do a register dump |
*** warning 1: Long branch within short branch range could be optimized |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
swi3_rout: |
00FFFC2B 01A010 sei |
00FFFC2D 035002 puls a |
00FFFC2F 09790F sta mon_CCRSAVE |
00FFFC31 03507E puls D,DPR,X,Y,U |
00FFFC33 0DD900 std mon_DSAVE |
00FFFC35 09F902 stx mon_XSAVE |
00FFFC37 19F904 sty mon_YSAVE |
00FFFC39 0DF906 stu mon_USAVE |
00FFFC3B 01F0B8 tfr dpr,a |
00FFFC3D 09790E sta mon_DPRSAVE |
00FFFC3F 035006 puls D |
00FFFC41 0DD90A std mon_PCSAVE |
00FFFC43 035006 puls D |
00FFFC45 0DD90C std mon_PCSAVE+2 |
00FFFC47 1DF908 sts mon_SSAVE |
00FFFC49 1CE003FFF lds #$3FFF |
00FFFC4C 01C0EF cli |
00FFFC4E 07EFFFB9A jmp DumpRegs |
00FFFC88 01A010 sei |
00FFFC8A 035002 puls a |
00FFFC8C 0B700090F sta mon_CCRSAVE |
00FFFC8F 03507E puls D,DPR,X,Y,U |
00FFFC91 0FD000900 std mon_DSAVE |
00FFFC94 0BF000902 stx mon_XSAVE |
00FFFC97 1BF000904 sty mon_YSAVE |
00FFFC9A 0FF000906 stu mon_USAVE |
00FFFC9D 01F0B8 tfr dpr,a |
00FFFC9F 0B700090E sta mon_DPRSAVE |
00FFFCA2 035002 puls a |
00FFFCA4 0B700090A sta mon_PCSAVE |
00FFFCA7 035006 puls D |
00FFFCA9 0FD00090B std mon_PCSAVE+1 |
00FFFCAC 1FF000908 sts mon_SSAVE |
00FFFCAF 1CE003FFF lds #$3FFF |
00FFFCB2 01C0EF cli |
00FFFCB4 07EFFFBCD jmp DumpRegs |
swi3_exit: |
00FFFC51 01A010 sei |
00FFFC53 1DE908 lds mon_SSAVE |
00FFFC55 0DC90C ldd mon_PCSAVE+2 |
00FFFC57 034006 pshs d |
00FFFC59 0DC90A ldd mon_PCSAVE |
00FFFC5B 034006 pshs d |
00FFFC5D 0DE906 ldu mon_USAVE |
00FFFC5F 19E904 ldy mon_YSAVE |
00FFFC61 09E902 ldx mon_XSAVE |
00FFFC63 034070 pshs x,y,u |
00FFFC65 09690E lda mon_DPRSAVE |
00FFFC67 034002 pshs a |
00FFFC69 0DC900 ldd mon_DSAVE |
00FFFC6B 034006 pshs d |
00FFFC6D 09690F lda mon_CCRSAVE |
00FFFC6F 034002 pshs a |
00FFFC71 01F08A tfr a,ccr |
00FFFC73 01C0EF cli |
00FFFC75 03B rti |
00FFFCB7 01A010 sei |
00FFFCB9 1FE000908 lds mon_SSAVE |
00FFFCBC 0FC00090B ldd mon_PCSAVE+1 |
00FFFCBF 034006 pshs d |
00FFFCC1 0B600090A lda mon_PCSAVE |
00FFFCC4 034002 pshs a |
00FFFCC6 0FE000906 ldu mon_USAVE |
00FFFCC9 1BE000904 ldy mon_YSAVE |
00FFFCCC 0BE000902 ldx mon_XSAVE |
00FFFCCF 034070 pshs x,y,u |
00FFFCD1 0B600090E lda mon_DPRSAVE |
00FFFCD4 034002 pshs a |
00FFFCD6 0FC000900 ldd mon_DSAVE |
00FFFCD9 034006 pshs d |
00FFFCDB 0B600090F lda mon_CCRSAVE |
00FFFCDE 034002 pshs a |
00FFFCE0 01F08A tfr a,ccr |
00FFFCE2 01C0EF cli |
00FFFCE4 03B rti |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
firq_rout: |
00FFFCE5 03B rti |
|
irq_rout: |
; lbsr SerialIRQ ; check for recieved character |
; lbsr TimerIRQ |
|
; Reset the edge sense circuit in the PIC |
00FFFC76 086002 lda #2 ; Timer is IRQ #2 |
00FFFC78 0150B7FFFE3F006 sta PIC+6 ; register 6 is edge sense reset reg |
00FFFCE6 08601F lda #31 ; Timer is IRQ #31 |
00FFFCE8 0B7FF0011 sta IrqSource ; stuff a byte indicating the IRQ source for PEEK() |
00FFFCEB 0150B7FFFE3F010 sta PIC+16 ; register 16 is edge sense reset reg |
00FFFCF0 0150B6FFFE6000D lda VIA+VIA_IFR |
00FFFCF5 02A011 bpl notTimerIRQ2 |
00FFFCF7 085800 bita #$800 |
00FFFCF9 02700D beq notTimerIRQ2 |
00FFFCFB 01507FFFFE60012 clr VIA+VIA_T3LL |
00FFFD00 01507FFFFE60013 clr VIA+VIA_T3LH |
00FFFD05 07CE00037 inc $E00037 ; update timer IRQ screen flag |
notTimerIRQ2: |
|
00FFFC7D 09779A sta IrqSource ; stuff a byte indicating the IRQ source for PEEK() |
00FFFC7F 0960DF lda IrqBase ; get the IRQ flag byte |
00FFFC81 044 lsra |
00FFFC82 09A0DF ora IrqBase |
00FFFC84 0840E0 anda #$E0 |
00FFFC86 0970DF sta IrqBase |
00FFFD08 0B6FF0014 lda IrqBase ; get the IRQ flag byte |
00FFFD0B 044 lsra |
00FFFD0C 0BAFF0014 ora IrqBase |
00FFFD0F 0840E0 anda #$E0 |
00FFFD11 0B7FF0014 sta IrqBase |
|
00FFFC88 01507CFFFE0006E inc TEXTSCR+110 ; update IRQ live indicator on screen |
; inc TEXTSCR+54 ; update IRQ live indicator on screen |
|
; flash the cursor |
; only bother to flash the cursor for the task with the IO focus. |
00FFFC8D 0150B6FFFFFFFE0 lda COREID |
00FFFC92 091100 cmpa IOFocusID |
00FFFC94 026021 bne tr1a |
00FFFC96 096114 lda CursorFlash ; test if we want a flashing cursor |
00FFFC98 02701D beq tr1a |
00FFFC9A 017FFF5DC lbsr CalcScreenLoc ; compute cursor location in memory |
*** warning 1: Long branch within short branch range could be optimized |
00FFFC9D 01F002 tfr d,y |
00FFFC9F 0A6A09002000 lda $2000,y ; get color code $2000 higher in memory |
00FFFCA3 0D67C6 ldb IRQFlag ; get counter |
00FFFCA5 054 lsrb |
00FFFCA6 044 lsra |
00FFFCA7 044 lsra |
00FFFCA8 044 lsra |
00FFFCA9 044 lsra |
00FFFCAA 054 lsrb |
00FFFCAB 049 rola |
00FFFCAC 054 lsrb |
00FFFCAD 049 rola |
00FFFCAE 054 lsrb |
00FFFCAF 049 rola |
00FFFCB0 054 lsrb |
00FFFCB1 049 rola |
00FFFCB2 0A7A0A000E00000 sta $E00000,y ; store the color code back to memory |
tr1a |
00FFFCB7 03B rti |
; lda COREID |
; cmpa IOFocusID |
; bne tr1a |
; lda CursorFlash ; test if we want a flashing cursor |
; beq tr1a |
; lbsr CalcScreenLoc ; compute cursor location in memory |
; tfr d,y |
; lda $2000,y ; get color code $2000 higher in memory |
; ldb IRQFlag ; get counter |
; lsrb |
; lsra |
; lsra |
; lsra |
; lsra |
; lsrb |
; rola |
; lsrb |
; rola |
; lsrb |
; rola |
; lsrb |
; rola |
; sta $E00000,y ; store the color code back to memory |
tr1a: |
00FFFD14 03B rti |
|
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
nmi_rout: |
00FFFCB8 0150F6FFFFFFFE0 ldb COREID |
00FFFCBD 086049 lda #'I' |
00FFFCBF 08EE00028 ldx #TEXTSCR+40 |
00FFFCC2 03A abx |
00FFFCC3 0A7804 sta ,x |
00FFFCC5 03B rti |
00FFFD15 0150F6FFFFFFFE0 ldb COREID |
00FFFD1A 086049 lda #'I' |
00FFFD1C 08EE00028 ldx #TEXTSCR+40 |
00FFFD1F 0A788F sta b,x |
rti_insn: |
00FFFD21 03B rti |
|
; Special Register Area |
org $FFFFE0 |
|
; Interrupt vector table |
|
org $FFFFF0 |
00FFFFF0 012 nop |
00FFFFF1 012 nop |
00FFFFF2 FFFC2B fcw swi3_rout |
|
org $FFFFF8 |
00FFFFF8 FFFC76 fcw irq_rout |
00FFFFFA FFF023 fcw start ; SWI |
00FFFFFC FFFCB8 fcw nmi_rout ; NMI |
00FFFFFE FFF023 fcw start ; RST |
00FFFFF0 FFFD21 fcw rti_insn ; reserved |
00FFFFF2 FFFC88 fcw swi3_rout ; SWI3 |
00FFFFF4 FFFD21 fcw rti_insn ; SWI2 |
00FFFFF6 FFFCE5 fcw firq_rout ; FIRQ |
00FFFFF8 FFFCE6 fcw irq_rout ; IRQ |
00FFFFFA FFE023 fcw start ; SWI |
00FFFFFC FFFD15 fcw nmi_rout ; NMI |
00FFFFFE FFE023 fcw start ; RST |
|
8 warning(s) in pass 2. |
176 warning(s) in pass 2. |
|
SYMBOL TABLE |
ASCIITODECNYBBLE 02 00FFFAC7 ASCIITOHEXNYBBLE 02 00FFFA9F BIOS_SCREENS 00 17000000 BLANKLINE 02 00FFF216 |
BLKCPYDST 00 00000020 BLKCPYSRC 00 0000001C BLNKLN1 02 00FFF229 CALCSCREENLOC 02 00FFF279 |
CHARCOLOR 00 00000112 CHARINVEC 00 00000804 CHAROUTVEC 00 00000800 CHECKPOINT 02 00FFF0E0 |
CLEARSCREEN 02 00FFF1D0 CLEARSCREENJMP 02 00FFD300 COLORCODELOCATION 00 00000014 COPYSCREENTOVIRTUALSCREEN 02 00FFF1A0 |
COPYVIRTUALSCREENTOSCREEN 02 00FFF178 COREID 00 FFFFFFE0 CR 00 0000000D CRLF 02 00FFD0D2 |
CRLF1 02 00FFD0D2 CRLFST 02 00FFF388 CS1 02 00FFF1DD CS2 02 00FFF1F3 |
CS2V1 02 00FFF1AC CS3 02 00FFF1F9 CSL1 02 00FFF293 CTRLC 00 00000003 |
CTRLH 00 00000008 CTRLI 00 00000009 CTRLJ 00 0000000A CTRLK 00 0000000B |
CTRLM 00 0000000D CTRLS 00 00000013 CTRLX 00 00000018 CURSORCOL 00 00000111 |
CURSORFLASH 00 00000114 CURSORROW 00 00000110 CV2S1 02 00FFF184 DBGCHECKFORKEY 02 00FFF839 |
DBGGETKEY 02 00FFF83B DBGK1 02 00FFF84F DBGK10 02 00FFF89E DBGK11 02 00FFF8F7 |
DBGK12 02 00FFF8FD DBGK13 02 00FFF909 DBGK14 02 00FFF919 DBGK15 02 00FFF928 |
DBGK16 02 00FFF933 DBGK17 02 00FFF93C DBGK18 02 00FFF93F DBGK2 02 00FFF83D |
DBGK3 02 00FFF854 DBGK4 02 00FFF862 DBGK5 02 00FFF86E DBGK7 02 00FFF87E |
DBGK8 02 00FFF884 DBGK9 02 00FFF898 DBGKNOTALT 02 00FFF901 DBGKNOTCAPSLOCK 02 00FFF8D0 |
DBGKNOTCTRL 02 00FFF888 DBGKNOTNUMLOCK 02 00FFF8B9 DBGKNOTRSHIFT 02 00FFF8A2 DBGKNOTSCROLLLOCK 02 00FFF8E7 |
DCCR 02 00FFF2A7 DCLF 02 00FFF32D DCX10 02 00FFF2E1 DCX11 02 00FFF2F1 |
DCX12 02 00FFF2ED DCX13 02 00FFF2FD DCX14 02 00FFF2A5 DCX3 02 00FFF31B |
DCX4 02 00FFF32F DCX5 02 00FFF30A DCX6 02 00FFF2B8 DCX7 02 00FFF2B4 |
DCX8 02 00FFF2C5 DCX9 02 00FFF2D2 DELAY3S 02 00FFF15B DISPBYTEASHEX 02 00FFF39D |
DISPDWORDASHEX 02 00FFF38B DISPLAYCHAR 02 00FFF29B DISPLAYERR 02 00FFFAD5 DISPLAYSTRING 02 00FFF354 |
DISPLAYSTRINGCRLF 02 00FFF362 DISPLAYSTRINGDX 02 00FFFADF DISPNYB 02 00FFF3B5 DISPNYB1 02 00FFF3C3 |
DISPWORDASHEX 02 00FFF394 DLY3S1 02 00FFF15E DLY3S2 02 00FFF162 DRAM_BASE 00 10000000 |
DSPJ1B 02 00FFF358 DSRETB 02 00FFF360 DUMPREGS 02 00FFFB9A DUMRTS 02 00FFF022 |
FIRST_CORE 00 00000001 FREEMBX 02 00000002 FREEMSG 02 00000006 FREETCB 00 0000078A |
GETHEXNUMBER 02 00FFFA73 GETRANGE 02 00FFFA5A GETSCREENLOCATION 02 00FFF230 GETTWOPARAMS 02 00FFFA41 |
GSL1 02 00FFF23D GTDC3 02 00FFFAD2 GTHX3 02 00FFFAC4 GTHX5 02 00FFFAAA |
GTHX6 02 00FFFAB7 GTHXN1 02 00FFFA9B GTHXN2 02 00FFFA7E HC1 02 00FFF256 |
HELPMSG 02 00FFFAEF HEX2 02 00FFD2CE HEX4 02 00FFD2D2 HOMECURSOR 02 00FFF241 |
HOMECURSORJMP 02 00FFD308 ICC1 02 00FFF350 ICC2 02 00FFF352 ICR1 02 00FFF342 |
IGNBLANKS 02 00FFFA38 IGNBLANKS1 02 00FFFA38 INCCURSORPOS 02 00FFF331 INCCURSORROW 02 00FFF340 |
INCH 02 00FFF95E INCHE 02 00FFF963 INCHEK 02 00FFF967 INCHEK1 02 00FFF97B |
INCHEK2 02 00FFF979 INCHEK3 02 00FFF970 INIT 02 00FFF072 IOFOCUSID 00 00000100 |
IOFOCUSNDX 00 00000100 IRQBASE 00 000000DF IRQFLAG 00 000007C6 IRQSOURCE 00 0000079A |
IRQ_ROUT 02 00FFFC76 JTC_EXIT 02 00FFFC11 JUMP_TO_CODE 02 00FFFBDE KBDI0002 02 00FFF7C5 |
KBDI0004 02 00FFF80A KBDITRYAGAIN 02 00FFF7FE KBGS1 02 00FFF778 KBGS2 02 00FFF770 |
KBGS3 02 00FFF761 KEYBD 00 FFE30400 KEYBDACK 00 FFFFCC00 KEYBDBAD 00 FFFFCB00 |
KEYBDBUFFER 00 FFFFC000 KEYBDCHECKFORKEYDIRECT 02 00FFF95C KEYBDCLOSE 02 00FFF958 KEYBDCLR 00 FFE30402 |
KEYBDCONTROLCODES 02 00FFF600 KEYBDECHO 00 FFFFCA00 KEYBDEXTENDEDCODES 02 00FFF680 KEYBDGETID 02 00FFF79C |
KEYBDGETSCANCODE 02 00FFF77D KEYBDGETSTATUS 02 00FFF761 KEYBDHEAD 00 FFFFC800 KEYBDID 00 00000124 |
KEYBDINIT 02 00FFF7C0 KEYBDLOCKS 00 FFFFCD00 KEYBDOPEN 02 00FFF957 KEYBDREAD 02 00FFF959 |
KEYBDRECVBYTE 02 00FFF700 KEYBDSEEK 02 00FFF95B KEYBDSENDBYTE 02 00FFF719 KEYBDSETLED 02 00FFF789 |
KEYBDTAIL 00 FFFFC900 KEYBDWAITTX 02 00FFF71F KEYBDWRITE 02 00FFF95A KEYLED 00 00000122 |
KEYSTATE1 00 00000120 KEYSTATE2 00 00000121 KGID1 02 00FFF7B9 KGNOTKBD 02 00FFF7BC |
KRB3 02 00FFF705 KRB4 02 00FFF715 KWT1 02 00FFF724 KWT2 02 00FFF735 |
LEDS 00 FFE60000 LEDXIT 02 00FFF81E LETTER 02 00FFD2C1 LF 00 0000000A |
MAX_TASKNO 00 0000003F MONGETCH 02 00FFFA28 MONGETNONSPACE 02 00FFFA2D MONITOR 02 00FFF996 |
MONITORSTART 02 00FFF991 MON_CCRSAVE 00 0000090F MON_DPRSAVE 00 0000090E MON_DSAVE 00 00000900 |
MON_NUMWKA 00 00000910 MON_PCSAVE 00 0000090A MON_R1 00 00000920 MON_R2 00 00000922 |
ACIA 00 FFE30100 ACIA_CMD 00 00000002 ACIA_CTRL 00 00000003 ACIA_CTRL2 00 0000000B |
ACIA_RX 00 00000000 ACIA_STAT 00 00000001 ACIA_TX 00 00000000 ASCIITODECNYBBLE 02 00FFFA50 |
ASCIITOHEXNYBBLE 02 00FFFA28 ASMBUF 00 00000160 ASMO 02 00FFF846 ASMOO 02 00FFF850 |
ASMOUTCH 02 00FFF85A BIOS_SCREENS 00 17000000 BLANKLINE 02 00FFE258 BLKCPYDST 00 00000020 |
BLKCPYSRC 00 0000001C BLNKLN1 02 00FFE26B CALCSCREENLOC 02 00FFE2BE CHARCOLOR 00 00000112 |
CHARINVEC 00 00000804 CHAROUTVEC 00 00000800 CHECKPOINT 02 00FFE115 CLEARSCREEN 02 00FFE211 |
CLEARSCREENJMP 02 00FFD300 CMDPROMPT 02 00FFF86A CMDPROMPTJI 00 00000808 COLORCODELOCATION 00 00000014 |
COPYSCREENTOVIRTUALSCREEN 02 00FFE1E1 COPYVIRTUALSCREENTOSCREEN 02 00FFE1AA COREID 00 FFFFFFE0 CR 00 0000000D |
CRLF 02 00FFD0D2 CRLF1 02 00FFD0D2 CRLFST 02 00FFE3E1 CS1 02 00FFE21E |
CS2 02 00FFE235 CS2V1 02 00FFE1ED CS3 02 00FFE23B CSL1 02 00FFE2D9 |
CTRLC 00 00000003 CTRLH 00 00000008 CTRLI 00 00000009 CTRLJ 00 0000000A |
CTRLK 00 0000000B CTRLM 00 0000000D CTRLS 00 00000013 CTRLT 00 00000014 |
CTRLX 00 00000018 CURSORCOL 00 00000111 CURSORFLASH 00 00000114 CURSORROW 00 00000110 |
CV2S1 02 00FFE1BF DAB1 02 00FFF869 DAB2 02 00FFF860 DBGCHECKFORKEY 02 00FFEA10 |
DBGK1 02 00FFEA4B DBGK10 02 00FFEAB0 DBGK11 02 00FFEB09 DBGK12 02 00FFEB0F |
DBGK13 02 00FFEB1B DBGK14 02 00FFEB2B DBGK15 02 00FFEB3A DBGK16 02 00FFEB45 |
DBGK17 02 00FFEB4E DBGK18 02 00FFEB51 DBGK2 02 00FFEA16 DBGK20 02 00FFEA38 |
DBGK22 02 00FFEA54 DBGK23 02 00FFEA65 DBGK24 02 00FFEA46 DBGK3 02 00FFEA68 |
DBGK4 02 00FFEA74 DBGK5 02 00FFEA80 DBGK7 02 00FFEA90 DBGK8 02 00FFEA96 |
DBGK9 02 00FFEAAA DBGKNOTALT 02 00FFEB13 DBGKNOTCAPSLOCK 02 00FFEAE2 DBGKNOTCTRL 02 00FFEA9A |
DBGKNOTNUMLOCK 02 00FFEACB DBGKNOTRSHIFT 02 00FFEAB4 DBGKNOTSCROLLLOCK 02 00FFEAF9 DCCR 02 00FFE2F1 |
DCLF 02 00FFE37B DCX10 02 00FFE32B DCX11 02 00FFE33B DCX12 02 00FFE337 |
DCX13 02 00FFE347 DCX14 02 00FFE2EE DCX3 02 00FFE369 DCX4 02 00FFE37D |
DCX5 02 00FFE358 DCX6 02 00FFE302 DCX7 02 00FFE2FE DCX8 02 00FFE30F |
DCX9 02 00FFE31C DELAY3S 02 00FFE18D DIRECT 00 00000001 DIS1 02 00FFF7CE |
DIS10 02 00FFF566 DIS11 02 00FFF5A2 DIS12 02 00FFF5DF DIS13 02 00FFF61B |
DIS14 02 00FFF65C DIS15 02 00FFF698 DIS16 02 00FFF6D5 DIS17 02 00FFF718 |
DIS18 02 00FFF760 DIS19 02 00FFF7FA DIS2 02 00FFF405 DIS20 02 00FFF3CE |
DIS21 02 00FFF403 DIS23 02 00FFF3D1 DIS24 02 00FFF7FD DIS25 02 00FFF80A |
DIS3 02 00FFF42E DIS4 02 00FFF44B DIS5 02 00FFF45C DIS6 02 00FFF490 |
DIS7 02 00FFF4C7 DIS8 02 00FFF4FB DIS9 02 00FFF532 DISASSEM 02 00FFF3B4 |
DISLOOP1 02 00FFF3BD DISNDXREG 02 00FFF831 DISNDXREGS 02 00FFF82D DISNEXTLINE 02 00FFF821 |
DISNOT9 02 00FFF440 DISNOTAOFFS 02 00FFF5CA DISNOTBO 02 00FFF607 DISNOTBOFFS 02 00FFF58E |
DISNOTDIRECT 02 00FFF3FF DISNOTDOFFS 02 00FFF6C0 DISNOTEXT 02 00FFF7AD DISNOTIMMB 02 00FFF7BE |
DISNOTIMMW 02 00FFF7CE DISNOTLREL 02 00FFF40F DISNOTNDX 02 00FFF7A1 DISNOTPBO 02 00FFF704 |
DISNOTPTO 02 00FFF78F DISNOTPWO 02 00FFF747 DISNOTR 02 00FFF552 DISNOTREL 02 00FFF418 |
DISNOTRMINUS 02 00FFF4EC DISNOTRMINUSMINUS 02 00FFF523 DISNOTRPLUS 02 00FFF481 DISNOTRPLUSPLUS 02 00FFF4B8 |
DISNOTTO 02 00FFF684 DISNOTWO 02 00FFF643 DISPBYTEASHEX 02 00FFE3F6 DISPDWORDASHEX 02 00FFE3E4 |
DISPLAYCHAR 02 00FFE2E1 DISPLAYERR 02 00FFFA5E DISPLAYSTRING 02 00FFE3A2 DISPLAYSTRINGCRLF 02 00FFE3B9 |
DISPLAYSTRINGDX 02 00FFFA68 DISPNYB 02 00FFE40E DISPNYB1 02 00FFE41D DISPWORDASHEX 02 00FFE3ED |
DISTBL1 02 00FFEDB4 DISTBL2 02 00FFF2B4 DISTBL3 02 00FFF2F4 DISTBL4 02 00FFF314 |
DLY3S1 02 00FFE190 DLY3S2 02 00FFE194 DMPM1 02 00FFFB8E DMPM2 02 00FFFB79 |
DMPM3 02 00FFFBC7 DMPM4 02 00FFFBB9 DMPM5 02 00FFFBB1 DRAM_BASE 00 10000000 |
DSPJ1B 02 00FFE3AB DSPJ2 02 00FFE3A6 DSRETB 02 00FFE3B4 DUMPASMBUF 02 00FFF85D |
DUMPMEMORY 02 00FFFB71 DUMPREGS 02 00FFFBCD DUMRTS 02 00FFE022 EXT 00 00000006 |
FAREXT 00 00000008 FIRQ_ROUT 02 00FFFCE5 FIRST_CORE 00 00000001 FREEMBX 02 00000002 |
FREEMSG 02 00000006 FREETCB 00 0000078A GETHEXNUMBER 02 00FFF9F8 GETKEY 02 00FFEA12 |
GETRANGE 02 00FFF9D6 GETSCREENLOCATION 02 00FFE272 GETTWOPARAMS 02 00FFF9B5 GSL1 02 00FFE280 |
GTDC3 02 00FFFA5B GTHX3 02 00FFFA4D GTHX5 02 00FFFA33 GTHX6 02 00FFFA40 |
GTHXN1 02 00FFFA24 GTHXN2 02 00FFFA05 HC1 02 00FFE29A HELPMSG 02 00FFFA78 |
HEX2 02 00FFD2CE HEX4 02 00FFD2D2 HOMECURSOR 02 00FFE284 HOMECURSORJMP 02 00FFD308 |
I2CW1 02 00FFE47E I2CWR1 02 00FFE4AB I2C_CMD 00 00000004 I2C_CTRL 00 00000002 |
I2C_PREH 00 00000001 I2C_PREL 00 00000000 I2C_RXR 00 00000003 I2C_STAT 00 00000004 |
I2C_TXR 00 00000003 I2C_WAIT_RX_NACK 02 00FFE4A9 I2C_WAIT_TIP 02 00FFE47C I2C_WR_CMD 02 00FFE486 |
ICC1 02 00FFE39E ICC2 02 00FFE3A0 ICR1 02 00FFE390 IGNBLANKS 02 00FFF9AC |
IGNBLANKS1 02 00FFF9AC IMMB 00 00000003 IMMW 00 00000007 INCCURSORPOS 02 00FFE37F |
INCCURSORROW 02 00FFE38E INCH 02 00FFECDA INCH1 02 00FFECEF INCH2 02 00FFECDC |
INCHE 02 00FFECF8 INCHEK 02 00FFECFC INCHEK1 02 00FFED11 INCHEK2 02 00FFED0E |
INCHEK3 02 00FFED05 INIT 02 00FFE086 INIT1 02 00FFE08E INITSERIAL 02 00FFEB6F |
IOFOCUSID 00 00FF0010 IOFOCUSLIST 00 00FF0000 IOFOCUSNDX 00 00000100 IRQBASE 00 00FF0014 |
IRQFLAG 00 00FF0012 IRQSOURCE 00 00FF0011 IRQ_ROUT 02 00FFFCE6 JTC_EXIT 02 00FFFC53 |
JUMP_TO_CODE 02 00FFFC18 KBDBUFFULL 02 00FFEA0D KBDFIFO 00 00000040 KBDFIFOALIAS 00 00C00040 |
KBDHEADRCV 00 00000127 KBDI0002 02 00FFE949 KBDI0004 02 00FFE98E KBDITRYAGAIN 02 00FFE982 |
KBDRCVCOUNT 02 00FFE9BD KBDTAILRCV 00 00000128 KBGS1 02 00FFE8F8 KBGS2 02 00FFE8F0 |
KBGS3 02 00FFE8E1 KEYBD 00 FFE30400 KEYBDACK 00 FFFFCC00 KEYBDBAD 00 FFFFCB00 |
KEYBDBLOCK 00 00000126 KEYBDBUFFER 00 FFFFC000 KEYBDCHECKFORKEYDIRECT 02 00FFECD8 KEYBDCLOSE 02 00FFEB6B |
KEYBDCLR 00 FFE30402 KEYBDCONTROLCODES 02 00FFE780 KEYBDECHO 00 FFFFCA00 KEYBDEXTENDEDCODES 02 00FFE800 |
KEYBDGETID 02 00FFE91C KEYBDGETSCANCODE 02 00FFE8FD KEYBDGETSTATUS 02 00FFE8E1 KEYBDHEAD 00 FFFFC800 |
KEYBDID 00 00000124 KEYBDINIT 02 00FFE940 KEYBDIRQ 02 00FFE9CF KEYBDLOCKS 00 FFFFCD00 |
KEYBDOPEN 02 00FFEB6A KEYBDREAD 02 00FFEB6C KEYBDRECVBYTE 02 00FFE880 KEYBDSEEK 02 00FFEB6E |
KEYBDSENDBYTE 02 00FFE899 KEYBDSETLED 02 00FFE909 KEYBDTAIL 00 FFFFC900 KEYBDWAITTX 02 00FFE89F |
KEYBDWRITE 02 00FFEB6D KEYLED 00 00000122 KEYSTATE1 00 00000120 KEYSTATE2 00 00000121 |
KGID1 02 00FFE939 KGNOTKBD 02 00FFE93C KRB3 02 00FFE885 KRB4 02 00FFE895 |
KRCXIT 02 00FFE9CE KWT1 02 00FFE8A4 KWT2 02 00FFE8B5 LEDS 00 FFE60001 |
LEDXIT 02 00FFE9A2 LETTER 02 00FFD2C1 LF 00 0000000A LSREL 00 00000002 |
MAX_TASKNO 00 0000003F MONGETCH 02 00FFF9A0 MONGETNONSPACE 02 00FFF9A5 MONITOR 02 00FFF8AC |
MONITORSTART 02 00FFF89A MON_CCRSAVE 00 0000090F MON_DPRSAVE 00 0000090E MON_DSAVE 00 00000900 |
MON_NUMWKA 00 00000910 MON_PCSAVE 00 0000090A MON_R1 00 00000920 MON_R2 00 00000924 |
MON_SSAVE 00 00000908 MON_USAVE 00 00000906 MON_XSAVE 00 00000902 MON_YSAVE 00 00000904 |
MSCOUNT 00 FFFFFFE4 MSGBADKEYBD 02 00FFF82A MSGERR 02 00FFFAE7 MSGREGHEADINGS 02 00FFFB64 |
MSGSTARTUP 02 00FFF0BF MULTI_SIEVE 02 00FFF0F6 MULTI_SIEVE1 02 00FFF119 MULTI_SIEVE2 02 00FFF115 |
MULTI_SIEVE3 02 00FFF103 MULTI_SIEVE4 02 00FFF12C NHEX4 02 00FFFB92 NMAILBOX 02 00000004 |
NMIBASE 00 000000DC NMI_ROUT 02 00FFFCB8 NMSGBLK 02 00000008 NXBLANK 02 00FFFB96 |
ONEKEY 02 00FFD1DC OUTCH 02 00FFF97C PCRLF 02 00FFF374 PDATA 02 00FFF381 |
PIC 00 FFE3F000 PICPTR 00 00000028 PRINT 02 00FFF37E PROMPT1 02 00FFF9B1 |
PROMPT2 02 00FFF9E5 PROMPT3 02 00FFF9A4 PROMPTC 02 00FFF9F0 PROMPTD 02 00FFF9FB |
PROMPTF 02 00FFFA07 PROMPTJ 02 00FFFA1A PROMPTLN 02 00FFF99D PROMPTR 02 00FFFA1F |
PSTRNG 02 00FFF370 QNDX0 00 00000780 QNDX1 00 00000782 QNDX2 00 00000784 |
QNDX3 00 00000786 QNDX4 00 00000788 RAMERR 02 00FFE02C RAMTEST 02 00FFE000 |
RAMTEST1 02 00FFE00D RAMTEST3 02 00FFE017 ROMTORAM 02 00FFF0E6 ROMTORAM1 02 00FFF0EC |
RUNNINGID 00 00800000 RUNNINGTCB 06 00000000 SCREENCOLOR 00 00000113 SCREENLOCATION 00 00000010 |
SCREENLOCATION2 00 00000018 SCROLLUP 02 00FFF1FB SCRUP1 02 00FFF208 SC_ALT 00 00000011 |
SC_C 00 00000021 SC_CAPSLOCK 00 00000058 SC_CTRL 00 00000014 SC_DEL 00 00000071 |
SC_EXTEND 00 000000E0 SC_F12 00 00000007 SC_KEYUP 00 000000F0 SC_NUMLOCK 00 00000077 |
SC_RSHIFT 00 00000059 SC_SCROLLLOCK 00 0000007E SC_T 00 0000002C SC_TAB 00 0000000D |
SC_Z 00 0000001A SETKEYBOARDECHO 02 00FFF980 SHIFTEDSCANCODES 02 00FFF500 SHIFTLEFT5 02 00FFF16D |
SHL_NUMWKA 02 00FFFA6A SHOWSPRITES 02 00FFF986 SIEVE 02 00FFF130 SIEVE1 02 00FFF148 |
SIEVE2 02 00FFF144 SIEVE3 02 00FFF135 SIEVE4 02 00FFF157 SKIP_INIT 02 00FFF08C |
SPRITE_CTRL 00 FFE10000 SPRITE_EN 00 000003C0 ST1 02 00FFF079 ST3 02 00FFF069 |
ST6 02 00FFF030 ST7 02 00FFF03A ST8 02 00FFF03A START 02 00FFF023 |
STRPTR 00 00000024 SWI3_EXIT 02 00FFFC51 SWI3_ROUT 02 00FFFC2B TAB 00 00000009 |
TCB_CURSORCOL 00 00000021 TCB_CURSORROW 00 00000020 TCB_HJCB 00 0000001C TCB_HWAITMBX 00 00000022 |
TCB_IOF_NEXT 00 0000002C TCB_IOF_PREV 00 00000030 TCB_MBQ_NEXT 00 00000024 TCB_MBQ_PREV 00 00000028 |
TCB_MMU_MAP 00 00000038 TCB_MSGPTR_D1 00 00000014 TCB_MSGPTR_D2 00 00000018 TCB_NXTRDY 00 00000000 |
TCB_NXTTCB 00 00000008 TCB_PRIORITY 00 00000010 TCB_PRVRDY 00 00000004 TCB_SPSAVE 00 00000034 |
TCB_STATUS 00 0000001E TCB_TIMEOUT 00 0000000C TEXTCLOSE 02 00FFF1CC TEXTOPEN 02 00FFF1CB |
TEXTREAD 02 00FFF1CD TEXTREG 00 FFE0DF00 TEXTSCR 00 FFE00000 TEXTSEEK 02 00FFF1CF |
TEXTWRITE 02 00FFF1CE TEXT_COLS 00 00000000 TEXT_CURPOS 00 00000022 TEXT_ROWS 00 00000001 |
TIMEOUTLIST 00 0000078C TR1A 02 00FFFCB7 UCP1 02 00FFF277 UNSHIFTEDSCANCODES 02 00FFF400 |
UPDATECURSORPOS 02 00FFF258 W10_0001 02 00FFF740 W300_0001 02 00FFF754 WAIT10MS 02 00FFF739 |
WAIT300MS 02 00FFF74D XBLANK 02 00FFD0AF XOFF 00 00000013 XON 00 00000011 |
328 SYMBOLS |
MSCOUNT 00 FFFFFFE4 MSGBADKEYBD 02 00FFE9AE MSGERR 02 00FFFA70 MSGF09STARTING 02 00FFF875 |
MSGREGHEADINGS 02 00FFFB2E MSGSERIALTEST 02 00FFECC5 MSGSTARTUP 02 00FFE0F4 MULTI_SIEVE 02 00FFE12B |
MULTI_SIEVE1 02 00FFE14E MULTI_SIEVE2 02 00FFE14A MULTI_SIEVE3 02 00FFE138 MULTI_SIEVE4 02 00FFE161 |
NDX 00 00000005 NHEX4 02 00FFFB68 NMAILBOX 02 00000004 NMESERIAL 02 00FFEC8E |
NMIBASE 00 00FF0013 NMI_ROUT 02 00FFFD15 NMSGBLK 02 00000008 NOTKBDIRQ 02 00FFEA0C |
NOTRXINT 02 00FFEC8D NOTTIMERIRQ 02 00FFE471 NOTTIMERIRQ2 02 00FFFD08 NXBLANK 02 00FFFB6C |
ONEKEY 02 00FFD1DC OSC1 02 00FFED59 OSCALL 02 00FFED59 OSCALLTBL 02 00FFED27 |
OSCX 02 00FFED69 OSSEMA 00 00EF0010 OUTCH 02 00FFED12 OUTSEMA 00 00EF0000 |
PCRLF 02 00FFE3CD PDATA 02 00FFE3DA PIC 00 FFE3F000 PICPTR 00 00000028 |
PRINT 02 00FFE3D7 PROMPT1 02 00FFF8D9 PROMPT2 02 00FFF905 PROMPT2A 02 00FFF923 |
PROMPT3 02 00FFF8CA PROMPTC 02 00FFF941 PROMPTD 02 00FFF94D PROMPTF 02 00FFF959 |
PROMPTHELP 02 00FFF935 PROMPTJ 02 00FFF96C PROMPTLN 02 00FFF8C6 PROMPTR 02 00FFF971 |
PROMPTT 02 00FFF984 PROMPTU 02 00FFF999 PROMPT_S 02 00FFF97B PSTRNG 02 00FFE3C9 |
QNDX0 00 00000780 QNDX1 00 00000782 QNDX2 00 00000784 QNDX3 00 00000786 |
QNDX4 00 00000788 RAMERR 02 00FFD42C RAMTEST 02 00FFD400 RAMTEST1 02 00FFD40D |
RAMTEST3 02 00FFD417 RELEASEIOFOCUS 02 00FFED84 REQUESTIOFOCUS 02 00FFED6D RIOF1 02 00FFEDAB |
RIOF2 02 00FFED9A ROMTORAM 02 00FFE11B ROMTORAM1 02 00FFE121 RTC 00 FFE30500 |
RTCBUF 00 00007FC0 RTCR0001 02 00FFE4D9 RTCW0001 02 00FFE524 RTC_READ 02 00FFE4B3 |
RTC_RXERR 02 00FFE502 RTC_WRITE 02 00FFE506 RTI_INSN 02 00FFFD21 RUNNINGID 00 00800000 |
RUNNINGTCB 06 00000000 SCREENCOLOR 00 00000113 SCREENLOCATION 00 00000010 SCREENLOCATION2 00 00000018 |
SCROLLUP 02 00FFE23D SCRUP1 02 00FFE24A SC_ALT 00 00000011 SC_C 00 00000021 |
SC_CAPSLOCK 00 00000058 SC_CTRL 00 00000014 SC_DEL 00 00000071 SC_EXTEND 00 000000E0 |
SC_F12 00 00000007 SC_KEYUP 00 000000F0 SC_NUMLOCK 00 00000077 SC_RSHIFT 00 00000059 |
SC_SCROLLLOCK 00 0000007E SC_T 00 0000002C SC_TAB 00 0000000D SC_Z 00 0000001A |
SEMAABS 00 00001000 SERHEADRCV 00 00000131 SERHEADXMIT 00 00000136 SERHZERO 00 00000130 |
SERIALGETCHAR 02 00FFEB9D SERIALINIT 02 00FFEB6F SERIALIRQ 02 00FFEC3B SERIALOUTPUTTEST 02 00FFECA5 |
SERIALPEEKCHAR 02 00FFEBCD SERIALPEEKCHARDIRECT 02 00FFEBE4 SERIALPUTCHAR 02 00FFEC08 SERIALPUTSTRING 02 00FFEC95 |
SERIALRCVCOUNT 02 00FFEC28 SERRCVBUF 00 00BFF000 SERRCVXOFF 00 00000140 SERRCVXON 00 00000139 |
SERTAILRCV 00 00000133 SERTAILXMIT 00 00000138 SERTZERO 00 00000132 SETKEYBOARDECHO 02 00FFED16 |
SGC2 02 00FFEBB6 SGCNOCHARS 02 00FFEBC6 SGCXIT 02 00FFEBC9 SHIFTEDSCANCODES 02 00FFE680 |
SHIFTLEFT5 02 00FFE19F SHL_NUMWKA 02 00FFF9EB SHOWSPRITES 02 00FFED1C SIEVE 02 00FFE165 |
SIEVE1 02 00FFE17D SIEVE2 02 00FFE179 SIEVE3 02 00FFE16A SIEVE4 02 00FFE18C |
SINI1 02 00FFEB82 SIRQ0001 02 00FFEC4D SIRQNXTBYTE 02 00FFEC3B SIRQRXFULL 02 00FFEC8D |
SKIPDOLLAR 02 00FFF8F8 SKIP_INIT 02 00FFE0C1 SOTST1 02 00FFECAF SPC0001 02 00FFEC0A |
SPCD0001 02 00FFEC02 SPCNOCHARS 02 00FFEBDF SPCXIT 02 00FFEBE2 SPRITE_CTRL 00 FFE10000 |
SPRITE_EN 00 000003C0 SPS2 02 00FFEC99 SPSXIT 02 00FFECA3 SRCXIT 02 00FFEC3A |
SREL 00 00000004 ST1 02 00FFE0A0 ST3 02 00FFE07D ST6 02 00FFE03C |
ST7 02 00FFE046 ST8 02 00FFE046 START 02 00FFE023 STRPTR 00 00000024 |
SWI3_EXIT 02 00FFFCB7 SWI3_ROUT 02 00FFFC88 TAB 00 00000009 TCB_CURSORCOL 00 00000021 |
TCB_CURSORROW 00 00000020 TCB_HJCB 00 0000001C TCB_HWAITMBX 00 00000022 TCB_IOF_NEXT 00 0000002C |
TCB_IOF_PREV 00 00000030 TCB_MBQ_NEXT 00 00000024 TCB_MBQ_PREV 00 00000028 TCB_MMU_MAP 00 00000038 |
TCB_MSGPTR_D1 00 00000014 TCB_MSGPTR_D2 00 00000018 TCB_NXTRDY 00 00000000 TCB_NXTTCB 00 00000008 |
TCB_PRIORITY 00 00000010 TCB_PRVRDY 00 00000004 TCB_SPSAVE 00 00000034 TCB_STATUS 00 0000001E |
TCB_TIMEOUT 00 0000000C TEXTCLOSE 02 00FFE20D TEXTOPEN 02 00FFE20C TEXTREAD 02 00FFE20E |
TEXTREG 00 FFE0DF00 TEXTSCR 00 FFE00000 TEXTSEEK 02 00FFE210 TEXTWRITE 02 00FFE20F |
TEXT_COLS 00 00000000 TEXT_CURPOS 00 00000022 TEXT_ROWS 00 00000001 TIMEOUTLIST 00 0000078C |
TIMERINIT 02 00FFE424 TIMERIRQ 02 00FFE44F TR1A 02 00FFFD14 UCP1 02 00FFE2BC |
UNSHIFTEDSCANCODES 02 00FFE580 UPDATECURSORPOS 02 00FFE29C VIA 00 FFE60000 VIA_ACR 00 0000000B |
VIA_DDRA 00 00000003 VIA_IER 00 0000000E VIA_IFR 00 0000000D VIA_PA 00 00000001 |
VIA_T3CMPH 00 00000015 VIA_T3CMPL 00 00000014 VIA_T3LH 00 00000013 VIA_T3LL 00 00000012 |
W10_0001 02 00FFE8C0 W300_0001 02 00FFE8D4 WAIT10MS 02 00FFE8B9 WAIT300MS 02 00FFE8CD |
XBLANK 02 00FFD0AF XOFF 00 00000013 XON 00 00000011 |
523 SYMBOLS |
|
0 error(s), 70 warning(s) |
0 error(s), 1582 warning(s) |
/trunk/software/boot/boot_rom.ver
4,8 → 4,8
rommem[ 4271] <= 12'h0C6; |
rommem[ 4272] <= 12'h020; |
rommem[ 4273] <= 12'h017; |
rommem[ 4274] <= 12'h002; |
rommem[ 4275] <= 12'h8CB; |
rommem[ 4274] <= 12'h001; |
rommem[ 4275] <= 12'hC5E; |
rommem[ 4276] <= 12'h039; |
rommem[ 4304] <= 12'h012; |
rommem[ 4305] <= 12'h012; |
12,13 → 12,13
rommem[ 4306] <= 12'h0C6; |
rommem[ 4307] <= 12'h00D; |
rommem[ 4308] <= 12'h017; |
rommem[ 4309] <= 12'h002; |
rommem[ 4310] <= 12'h8A8; |
rommem[ 4309] <= 12'h001; |
rommem[ 4310] <= 12'hC3B; |
rommem[ 4311] <= 12'h0C6; |
rommem[ 4312] <= 12'h00A; |
rommem[ 4313] <= 12'h017; |
rommem[ 4314] <= 12'h002; |
rommem[ 4315] <= 12'h8A3; |
rommem[ 4314] <= 12'h001; |
rommem[ 4315] <= 12'hC36; |
rommem[ 4316] <= 12'h039; |
rommem[ 4336] <= 12'h012; |
rommem[ 4337] <= 12'h020; |
29,3319 → 29,7505
rommem[ 4575] <= 12'h804; |
rommem[ 4800] <= 12'h012; |
rommem[ 4801] <= 12'h017; |
rommem[ 4802] <= 12'h002; |
rommem[ 4803] <= 12'h6BB; |
rommem[ 4802] <= 12'h001; |
rommem[ 4803] <= 12'hA4E; |
rommem[ 4804] <= 12'h039; |
rommem[ 4812] <= 12'h012; |
rommem[ 4813] <= 12'h012; |
rommem[ 4814] <= 12'h017; |
rommem[ 4815] <= 12'h002; |
rommem[ 4816] <= 12'h0CC; |
rommem[ 4815] <= 12'h001; |
rommem[ 4816] <= 12'h125; |
rommem[ 4817] <= 12'h039; |
rommem[ 4818] <= 12'h017; |
rommem[ 4819] <= 12'h002; |
rommem[ 4820] <= 12'h0BF; |
rommem[ 4819] <= 12'h001; |
rommem[ 4820] <= 12'h118; |
rommem[ 4821] <= 12'h039; |
rommem[ 4864] <= 12'h016; |
rommem[ 4865] <= 12'h001; |
rommem[ 4866] <= 12'hECD; |
rommem[ 4865] <= 12'h000; |
rommem[ 4866] <= 12'hF0E; |
rommem[ 4872] <= 12'h016; |
rommem[ 4873] <= 12'h001; |
rommem[ 4874] <= 12'hF36; |
rommem[ 8192] <= 12'h18E; |
rommem[ 8193] <= 12'h000; |
rommem[ 8194] <= 12'h000; |
rommem[ 8195] <= 12'h086; |
rommem[ 8196] <= 12'h001; |
rommem[ 8197] <= 12'h015; |
rommem[ 8198] <= 12'h0B7; |
rommem[ 8199] <= 12'hFFF; |
rommem[ 8200] <= 12'hE60; |
rommem[ 8201] <= 12'h000; |
rommem[ 8202] <= 12'h0CC; |
rommem[ 8203] <= 12'hAAA; |
rommem[ 8204] <= 12'h555; |
rommem[ 8205] <= 12'h0ED; |
rommem[ 8206] <= 12'hA01; |
rommem[ 8207] <= 12'h18C; |
rommem[ 8208] <= 12'h008; |
rommem[ 8209] <= 12'h000; |
rommem[ 8210] <= 12'h025; |
rommem[ 8211] <= 12'hFF9; |
rommem[ 8212] <= 12'h18E; |
rommem[ 8213] <= 12'h000; |
rommem[ 8214] <= 12'h000; |
rommem[ 8215] <= 12'h0EC; |
rommem[ 8216] <= 12'hA01; |
rommem[ 8217] <= 12'h183; |
rommem[ 8218] <= 12'hAAA; |
rommem[ 8219] <= 12'h555; |
rommem[ 8220] <= 12'h026; |
rommem[ 8221] <= 12'h00E; |
rommem[ 8222] <= 12'h18C; |
rommem[ 8223] <= 12'h008; |
rommem[ 8224] <= 12'h000; |
rommem[ 8225] <= 12'h025; |
rommem[ 8226] <= 12'hFF4; |
rommem[ 4873] <= 12'h000; |
rommem[ 4874] <= 12'hF79; |
rommem[ 5120] <= 12'h18E; |
rommem[ 5121] <= 12'h000; |
rommem[ 5122] <= 12'h000; |
rommem[ 5123] <= 12'h086; |
rommem[ 5124] <= 12'h001; |
rommem[ 5125] <= 12'h015; |
rommem[ 5126] <= 12'h0B7; |
rommem[ 5127] <= 12'hFFF; |
rommem[ 5128] <= 12'hE60; |
rommem[ 5129] <= 12'h001; |
rommem[ 5130] <= 12'h0CC; |
rommem[ 5131] <= 12'hAAA; |
rommem[ 5132] <= 12'h555; |
rommem[ 5133] <= 12'h0ED; |
rommem[ 5134] <= 12'hA01; |
rommem[ 5135] <= 12'h18C; |
rommem[ 5136] <= 12'h008; |
rommem[ 5137] <= 12'h000; |
rommem[ 5138] <= 12'h025; |
rommem[ 5139] <= 12'hFF9; |
rommem[ 5140] <= 12'h18E; |
rommem[ 5141] <= 12'h000; |
rommem[ 5142] <= 12'h000; |
rommem[ 5143] <= 12'h0EC; |
rommem[ 5144] <= 12'hA01; |
rommem[ 5145] <= 12'h183; |
rommem[ 5146] <= 12'hAAA; |
rommem[ 5147] <= 12'h555; |
rommem[ 5148] <= 12'h026; |
rommem[ 5149] <= 12'h00E; |
rommem[ 5150] <= 12'h18C; |
rommem[ 5151] <= 12'h008; |
rommem[ 5152] <= 12'h000; |
rommem[ 5153] <= 12'h025; |
rommem[ 5154] <= 12'hFF4; |
rommem[ 5155] <= 12'h086; |
rommem[ 5156] <= 12'h002; |
rommem[ 5157] <= 12'h015; |
rommem[ 5158] <= 12'h0B7; |
rommem[ 5159] <= 12'hFFF; |
rommem[ 5160] <= 12'hE60; |
rommem[ 5161] <= 12'h001; |
rommem[ 5162] <= 12'h06E; |
rommem[ 5163] <= 12'hC04; |
rommem[ 5164] <= 12'h086; |
rommem[ 5165] <= 12'h080; |
rommem[ 5166] <= 12'h015; |
rommem[ 5167] <= 12'h0B7; |
rommem[ 5168] <= 12'hFFF; |
rommem[ 5169] <= 12'hE60; |
rommem[ 5170] <= 12'h001; |
rommem[ 5171] <= 12'h08E; |
rommem[ 5172] <= 12'hE00; |
rommem[ 5173] <= 12'h000; |
rommem[ 5174] <= 12'h015; |
rommem[ 5175] <= 12'h0F6; |
rommem[ 5176] <= 12'hFFF; |
rommem[ 5177] <= 12'hFFF; |
rommem[ 5178] <= 12'hFE0; |
rommem[ 5179] <= 12'h03A; |
rommem[ 5180] <= 12'h086; |
rommem[ 5181] <= 12'h046; |
rommem[ 5182] <= 12'h0A7; |
rommem[ 5183] <= 12'h804; |
rommem[ 5184] <= 12'h013; |
rommem[ 5185] <= 12'h06E; |
rommem[ 5186] <= 12'hC04; |
rommem[ 8192] <= 12'hFFF; |
rommem[ 8193] <= 12'h8AC; |
rommem[ 8194] <= 12'hFFE; |
rommem[ 8195] <= 12'h022; |
rommem[ 8196] <= 12'hFFE; |
rommem[ 8197] <= 12'hCDA; |
rommem[ 8198] <= 12'hFFE; |
rommem[ 8199] <= 12'hCF8; |
rommem[ 8200] <= 12'hFFE; |
rommem[ 8201] <= 12'hCFC; |
rommem[ 8202] <= 12'hFFE; |
rommem[ 8203] <= 12'hD12; |
rommem[ 8204] <= 12'hFFE; |
rommem[ 8205] <= 12'h3DA; |
rommem[ 8206] <= 12'hFFE; |
rommem[ 8207] <= 12'h3CD; |
rommem[ 8208] <= 12'hFFE; |
rommem[ 8209] <= 12'h3C9; |
rommem[ 8210] <= 12'hFFE; |
rommem[ 8211] <= 12'h022; |
rommem[ 8212] <= 12'hFFE; |
rommem[ 8213] <= 12'h022; |
rommem[ 8214] <= 12'hFFE; |
rommem[ 8215] <= 12'h022; |
rommem[ 8216] <= 12'hFFE; |
rommem[ 8217] <= 12'h022; |
rommem[ 8218] <= 12'hFFE; |
rommem[ 8219] <= 12'h022; |
rommem[ 8220] <= 12'hFFE; |
rommem[ 8221] <= 12'h2E1; |
rommem[ 8222] <= 12'hFFE; |
rommem[ 8223] <= 12'h022; |
rommem[ 8224] <= 12'hFFE; |
rommem[ 8225] <= 12'h022; |
rommem[ 8226] <= 12'h039; |
rommem[ 8227] <= 12'h086; |
rommem[ 8228] <= 12'h002; |
rommem[ 8228] <= 12'hFFF; |
rommem[ 8229] <= 12'h015; |
rommem[ 8230] <= 12'h0B7; |
rommem[ 8231] <= 12'hFFF; |
rommem[ 8232] <= 12'hE60; |
rommem[ 8233] <= 12'h000; |
rommem[ 8234] <= 12'h06E; |
rommem[ 8235] <= 12'hC04; |
rommem[ 8236] <= 12'h086; |
rommem[ 8237] <= 12'h080; |
rommem[ 8238] <= 12'h015; |
rommem[ 8239] <= 12'h0B7; |
rommem[ 8240] <= 12'hFFF; |
rommem[ 8241] <= 12'hE60; |
rommem[ 8242] <= 12'h000; |
rommem[ 8243] <= 12'h08E; |
rommem[ 8244] <= 12'hE00; |
rommem[ 8245] <= 12'h000; |
rommem[ 8246] <= 12'h015; |
rommem[ 8247] <= 12'h0F6; |
rommem[ 8248] <= 12'hFFF; |
rommem[ 8249] <= 12'hFFF; |
rommem[ 8250] <= 12'hFE0; |
rommem[ 8251] <= 12'h03A; |
rommem[ 8252] <= 12'h086; |
rommem[ 8253] <= 12'h046; |
rommem[ 8254] <= 12'h0A7; |
rommem[ 8255] <= 12'h804; |
rommem[ 8256] <= 12'h013; |
rommem[ 8257] <= 12'h06E; |
rommem[ 8258] <= 12'hC04; |
rommem[12288] <= 12'hFFF; |
rommem[12289] <= 12'h999; |
rommem[12290] <= 12'hFFF; |
rommem[12291] <= 12'h022; |
rommem[12292] <= 12'hFFF; |
rommem[12293] <= 12'h961; |
rommem[12294] <= 12'hFFF; |
rommem[12295] <= 12'h966; |
rommem[12296] <= 12'hFFF; |
rommem[12297] <= 12'h96A; |
rommem[12298] <= 12'hFFF; |
rommem[12299] <= 12'h97F; |
rommem[12300] <= 12'hFFF; |
rommem[12301] <= 12'h381; |
rommem[12302] <= 12'hFFF; |
rommem[12303] <= 12'h374; |
rommem[12304] <= 12'hFFF; |
rommem[12305] <= 12'h370; |
rommem[12306] <= 12'hFFF; |
rommem[12307] <= 12'h022; |
rommem[12308] <= 12'hFFF; |
rommem[12309] <= 12'h022; |
rommem[12310] <= 12'hFFF; |
rommem[12311] <= 12'h022; |
rommem[12312] <= 12'hFFF; |
rommem[12313] <= 12'h022; |
rommem[12314] <= 12'hFFF; |
rommem[12315] <= 12'h022; |
rommem[12316] <= 12'hFFF; |
rommem[12317] <= 12'h29B; |
rommem[12318] <= 12'hFFF; |
rommem[12319] <= 12'h022; |
rommem[12320] <= 12'hFFF; |
rommem[12321] <= 12'h022; |
rommem[12322] <= 12'h039; |
rommem[12323] <= 12'h086; |
rommem[12324] <= 12'h055; |
rommem[12325] <= 12'h015; |
rommem[12326] <= 12'h0B7; |
rommem[12327] <= 12'hFFF; |
rommem[12328] <= 12'hE60; |
rommem[12329] <= 12'h000; |
rommem[12330] <= 12'h0CE; |
rommem[12331] <= 12'hFFF; |
rommem[12332] <= 12'h030; |
rommem[12333] <= 12'h07E; |
rommem[12334] <= 12'hFFE; |
rommem[12335] <= 12'h000; |
rommem[12336] <= 12'h1CE; |
rommem[12337] <= 12'h003; |
rommem[12338] <= 12'hFFF; |
rommem[12339] <= 12'h015; |
rommem[12340] <= 12'h0B6; |
rommem[12341] <= 12'hFFF; |
rommem[12342] <= 12'hFFF; |
rommem[12343] <= 12'hFE0; |
rommem[12344] <= 12'h081; |
rommem[12345] <= 12'h002; |
rommem[12346] <= 12'h08D; |
rommem[12347] <= 12'h11F; |
rommem[12348] <= 12'h086; |
rommem[12349] <= 12'h0AA; |
rommem[12350] <= 12'h015; |
rommem[12351] <= 12'h0B7; |
rommem[12352] <= 12'hFFF; |
rommem[12353] <= 12'hE60; |
rommem[12354] <= 12'h000; |
rommem[12355] <= 12'h086; |
rommem[12356] <= 12'h002; |
rommem[12357] <= 12'h097; |
rommem[12358] <= 12'h100; |
rommem[12359] <= 12'h0B7; |
rommem[12360] <= 12'h800; |
rommem[12361] <= 12'h000; |
rommem[12362] <= 12'h086; |
rommem[12363] <= 12'h0CE; |
rommem[12364] <= 12'h097; |
rommem[12365] <= 12'h113; |
rommem[12366] <= 12'h097; |
rommem[12367] <= 12'h112; |
rommem[12368] <= 12'h08D; |
rommem[12369] <= 12'h17E; |
rommem[12370] <= 12'h0CC; |
rommem[12371] <= 12'hFFF; |
rommem[12372] <= 12'h29B; |
rommem[12373] <= 12'h0DD; |
rommem[12374] <= 12'h800; |
rommem[12375] <= 12'h0CC; |
rommem[12376] <= 12'hFFF; |
rommem[12377] <= 12'h83B; |
rommem[12378] <= 12'h0DD; |
rommem[12379] <= 12'h804; |
rommem[12380] <= 12'h015; |
rommem[12381] <= 12'h0F6; |
rommem[12382] <= 12'hFFF; |
rommem[12383] <= 12'hFFF; |
rommem[12384] <= 12'hFE0; |
rommem[12385] <= 12'h0C1; |
rommem[12386] <= 12'h002; |