jump table now uses vectors in RAM
This commit is contained in:
1 parent
fb9caa7602
commit
d5d6581901
32 files changed
+60
-140
No files matched your search
@@ -20,7 +20,7 @@ print_string_loop:
|
||||
lda (temp_string_ptr),y
|
||||
beq print_string_end
|
||||
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
txa
|
||||
tay
|
||||
|
||||
@@ -29,7 +29,7 @@ startup_banner:
|
||||
jsr print_integer
|
||||
|
||||
lda #$20
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
;; Print the rest of the start up message
|
||||
ldx #34
|
||||
|
||||
@@ -7,9 +7,9 @@ basic_do_error:
|
||||
|
||||
;; Print ? at start
|
||||
lda #$0d
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
lda #$3f
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
;; Print main part of error message
|
||||
pla
|
||||
@@ -18,7 +18,7 @@ basic_do_error:
|
||||
|
||||
;; Print ERROR at end
|
||||
lda #$20
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
ldx #33
|
||||
jsr print_packed_message
|
||||
|
||||
@@ -27,9 +27,9 @@ basic_do_error:
|
||||
;; XXX print line number if not in direct mode
|
||||
|
||||
lda #$0d
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
lda #$0d
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
;; Reset stack, and go back to main loop
|
||||
ldx #$fe
|
||||
|
||||
@@ -52,7 +52,7 @@ rsl_l1: lda $0200,x
|
||||
*
|
||||
;; Do printing of the new line
|
||||
lda #$0d
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
;; Ignore empty lines
|
||||
lda tokenise_work1
|
||||
|
||||
@@ -17,7 +17,7 @@ basic_do_break:
|
||||
|
||||
*
|
||||
lda #$0d
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
cmd_end:
|
||||
jmp basic_main_loop
|
||||
|
||||
@@ -42,7 +42,7 @@ list_single_line: ; entry point needed by DOS wedge
|
||||
pla
|
||||
jsr print_integer
|
||||
lda #$20
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
;; Iterate through printing out the line
|
||||
;; contents
|
||||
@@ -111,16 +111,16 @@ list_not_rem:
|
||||
bne list_print_loop
|
||||
|
||||
list_is_literal:
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
iny
|
||||
bne list_print_loop
|
||||
|
||||
list_end_of_line:
|
||||
;; Clear reverse flag
|
||||
lda #$92
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
;; Print end of line
|
||||
lda #$0d
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
rts
|
||||
|
||||
@@ -191,6 +191,7 @@ end_of_line_search:
|
||||
pla
|
||||
sta basic_current_line_ptr+0
|
||||
|
||||
|
||||
|
||||
jmp basic_relink_loop
|
||||
|
||||
via_ILOAD:
|
||||
jmp (ILOAD)
|
||||
@@ -115,7 +115,7 @@ found_start_of_number:
|
||||
;; Print digits
|
||||
* lda $0100,y
|
||||
ora #$30
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
iny
|
||||
cpy #5
|
||||
bne -
|
||||
|
||||
@@ -38,7 +38,7 @@ found_message_in_token_stream:
|
||||
beq +
|
||||
jsr print_packed_word
|
||||
lda #$20
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
pla
|
||||
tay
|
||||
iny
|
||||
@@ -47,7 +47,7 @@ found_message_in_token_stream:
|
||||
pla
|
||||
;; Rub out space at the end
|
||||
lda #$14
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
rts
|
||||
|
||||
print_packed_word:
|
||||
@@ -144,7 +144,7 @@ next_packed_word_char:
|
||||
|
||||
;; X=1-14 = first 14 chars, so subtract one
|
||||
lda packed_message_chars-1,x
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
;; See if there is a char in the low nybl to print
|
||||
pla
|
||||
@@ -171,7 +171,7 @@ has_nybl:
|
||||
|
||||
;; X=1-14 = first 14 chars, so subtract one
|
||||
lda packed_message_chars-1,x
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
*
|
||||
pla
|
||||
tay
|
||||
@@ -207,7 +207,7 @@ unpack_literal_char:
|
||||
tya
|
||||
pha
|
||||
lda (temp_string_ptr),y
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
pla
|
||||
tay
|
||||
rts
|
||||
|
||||
+3
-3
@@ -112,7 +112,7 @@ not_hexword:
|
||||
|
||||
not_pointer:
|
||||
;; Print character
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
|
||||
printf_nextchar:
|
||||
jsr printf_advance
|
||||
@@ -148,11 +148,11 @@ printf_printhexbyte:
|
||||
cmp #$3A
|
||||
bcc +
|
||||
adc #6
|
||||
* jsr via_IBSOUT
|
||||
* jsr JCHROUT
|
||||
pla
|
||||
and #$0f
|
||||
ora #$30
|
||||
cmp #$3A
|
||||
bcc +
|
||||
adc #6
|
||||
* jmp via_IBSOUT
|
||||
* jmp JCHROUT
|
||||
@@ -1,42 +0,0 @@
|
||||
|
||||
;;
|
||||
;; Helper routines for jumping via vectors, to be used with JSR
|
||||
;;
|
||||
;; Note: they are not in the order of low memory vectors, to avoid
|
||||
;; similarity with the original ROMs
|
||||
|
||||
via_ISAVE:
|
||||
jmp (ISAVE)
|
||||
|
||||
via_ILOAD:
|
||||
jmp (ILOAD)
|
||||
|
||||
via_ICLOSE:
|
||||
jmp (ICLOSE)
|
||||
|
||||
via_IOPEN:
|
||||
jmp (IOPEN)
|
||||
|
||||
via_ICHKIN:
|
||||
jmp (ICHKIN)
|
||||
|
||||
via_IBASIN:
|
||||
jmp (IBASIN)
|
||||
|
||||
via_IGETIN:
|
||||
jmp (IGETIN)
|
||||
|
||||
via_ICKOUT:
|
||||
jmp (ICKOUT)
|
||||
|
||||
via_IBSOUT:
|
||||
jmp (IBSOUT)
|
||||
|
||||
via_ICLRCH:
|
||||
jmp (ICLRCH)
|
||||
|
||||
via_ICLALL:
|
||||
jmp (ICLALL)
|
||||
|
||||
via_ISTOP:
|
||||
jmp (ISTOP)
|
||||
+15
-15
@@ -4,7 +4,7 @@
|
||||
wedge_dos:
|
||||
|
||||
;; Close all the channels, so that wedge has full control
|
||||
jsr via_ICLALL
|
||||
jsr JCLALL
|
||||
|
||||
;; Set file parameters, channel 15 is a typical one for commands
|
||||
jsr select_device ; sets X register
|
||||
@@ -41,11 +41,11 @@ wedge_dos_command:
|
||||
jsr wedge_dos_setnam
|
||||
|
||||
jsr JSETNAM
|
||||
jsr via_IOPEN
|
||||
jsr JOPEN
|
||||
bcs wedge_dos_basic_error
|
||||
|
||||
;; Retrieve status, print it if not OK
|
||||
jsr via_ICLALL
|
||||
jsr JCLALL
|
||||
jsr wedge_dos_status_get
|
||||
lda BUF+0
|
||||
cmp #$30 ; '0'
|
||||
@@ -82,12 +82,12 @@ wedge_dos_status_get:
|
||||
;; Set remaining file parameters, open the channel
|
||||
lda #$00 ; empty file name
|
||||
jsr JSETNAM
|
||||
jsr via_IOPEN
|
||||
jsr JOPEN
|
||||
bcs wedge_dos_basic_error
|
||||
|
||||
;; Set channel for input
|
||||
ldx #$0F
|
||||
jsr via_ICHKIN
|
||||
jsr JCHKIN
|
||||
bcs wedge_dos_basic_error
|
||||
|
||||
ldy #$00
|
||||
@@ -98,7 +98,7 @@ wedge_dos_status_get:
|
||||
;; XXX error in case of status != EOF
|
||||
;; Print out everything retrieved from the drive
|
||||
bne +
|
||||
jsr via_IBASIN
|
||||
jsr JCHRIN
|
||||
bcs wedge_dos_basic_error
|
||||
sta BUF, y
|
||||
iny
|
||||
@@ -118,7 +118,7 @@ wedge_dos_status_print:
|
||||
dey
|
||||
bmi +
|
||||
lda BUF, x
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
inx
|
||||
bne -
|
||||
*
|
||||
@@ -139,18 +139,18 @@ wedge_dos_directory:
|
||||
jsr wedge_dos_setnam
|
||||
|
||||
;; Open the file
|
||||
jsr via_IOPEN
|
||||
jsr JOPEN
|
||||
bcs wedge_dos_basic_error
|
||||
|
||||
;; Set channel for file reading
|
||||
ldx #$00
|
||||
jsr via_ICHKIN
|
||||
jsr JCHKIN
|
||||
bcs wedge_dos_basic_error
|
||||
|
||||
;; Ignore start address (2 first bytes) - XXX check for errors
|
||||
jsr via_IBASIN
|
||||
jsr JCHRIN
|
||||
bcs wedge_dos_basic_error
|
||||
jsr via_IBASIN
|
||||
jsr JCHRIN
|
||||
bcs wedge_dos_basic_error
|
||||
|
||||
wedge_dos_directory_line:
|
||||
@@ -159,7 +159,7 @@ wedge_dos_directory_line:
|
||||
ldy #$FF
|
||||
*
|
||||
iny
|
||||
jsr via_IBASIN
|
||||
jsr JCHRIN
|
||||
bcs wedge_dos_basic_error
|
||||
sta BUF, y
|
||||
cpy #$50
|
||||
@@ -199,15 +199,15 @@ wedge_dos_directory_display:
|
||||
;; FALLTROUGH
|
||||
|
||||
wedge_dos_clean_exit:
|
||||
jsr via_ICLALL
|
||||
jsr JCLALL
|
||||
;; Print new line
|
||||
lda #$0D
|
||||
jsr via_IBSOUT
|
||||
jsr JCHROUT
|
||||
jmp basic_end_of_line
|
||||
|
||||
wedge_dos_basic_error:
|
||||
pha
|
||||
jsr via_ICLALL
|
||||
jsr JCLALL
|
||||
pla
|
||||
tax
|
||||
dex
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
; open a logical file
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp open
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (IOPEN)
|
||||
@@ -1,3 +1,4 @@
|
||||
; close a specified logical file
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp close
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (ICLOSE)
|
||||
@@ -1,3 +1,4 @@
|
||||
; Open channel for input
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp chkin
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (ICHKIN)
|
||||
@@ -1,3 +1,4 @@
|
||||
; Open channel for output
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp ckout
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (ICKOUT)
|
||||
@@ -1,3 +1,4 @@
|
||||
; close input and output channels
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp clrchn
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (ICLRCH)
|
||||
@@ -1,3 +1,4 @@
|
||||
; Input character from channel
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp chrin
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (IBASIN)
|
||||
@@ -1,3 +1,4 @@
|
||||
; Output character to channel
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp chrout
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (IBSOUT)
|
||||
@@ -1,3 +1,4 @@
|
||||
; Scan stop key
|
||||
; C64 Programmer's Reference Guide Page 273
|
||||
jmp stop
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (ISTOP)
|
||||
@@ -1,3 +1,4 @@
|
||||
; Get character from keyboard queue (keyboard buffer)
|
||||
; C64 Programmer's Reference Guide Page 272
|
||||
jmp getin
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (IGETIN)
|
||||
@@ -1,3 +1,4 @@
|
||||
; $FFE7 - Close all files vector
|
||||
; (http://codebase64.org/doku.php?id=base:kernalreference)
|
||||
jmp clall
|
||||
; According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect
|
||||
jmp (ICLALL)
|
||||
@@ -65,24 +65,3 @@ vector_restore:
|
||||
rts
|
||||
|
||||
.scend
|
||||
|
||||
;; XXX below we have quite a lot of data... should we decouple them?
|
||||
|
||||
vector_defaults:
|
||||
.word default_irq_handler ;; CINV
|
||||
.word $0000 ;; CBINV XXX implement this
|
||||
.word $0000 ;; NMINV XXX implement this
|
||||
|
||||
.word open ;; IOPEN
|
||||
.word close ;; ICLOSE
|
||||
.word chkin ;; ICHKIN
|
||||
.word ckout ;; ICKOUT
|
||||
.word clrchn ;; ICLRCH
|
||||
.word chrin ;; IBASIN
|
||||
.word chrout ;; IBSOUT
|
||||
.word stop ;; ISTOP
|
||||
.word getin ;; IGETIN
|
||||
.word clall ;; ICLALL
|
||||
.word $0000 ;; USRCMD XXX implement this
|
||||
.word load ;; ILOAD
|
||||
.word save ;; ISAVE
|
||||
@@ -1,3 +0,0 @@
|
||||
$03 (most likely adddress higher byte) + JMP ($031C) (via public, documented vector) + JMP (address does not match)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
@@ -1,3 +0,0 @@
|
||||
$03 (most likely adddress higher byte) + JMP ($031E) (via public, documented vector) + JMP (address does not match)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
@@ -1,3 +0,0 @@
|
||||
$03 (most likely adddress higher byte) + JMP ($0320) (via public, documented vector) + JMP (address does not match)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
@@ -1,3 +0,0 @@
|
||||
$03 (most likely adddress higher byte) + JMP ($0322) (via public, documented vector) + JMP (address does not match)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
@@ -1,3 +0,0 @@
|
||||
03 (most likely adddress higher byte) + JMP ($0324) (via public, documented vector) + JMP (address does not match)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
@@ -1,3 +0,0 @@
|
||||
$03 (most likely adddress higher byte) + JMP ($0326) (via public, documented vector)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
@@ -1,4 +0,0 @@
|
||||
$03 (most likely adddress higher byte) + JMP ($032A) (via public, documented vector) + JMP (address does not match)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
$03 (most likely adddress higher byte) + JMP ($032C) (via public, documented vector)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
@@ -1,3 +0,0 @@
|
||||
JMP ($031A) (via public, documented vector) + JMP (address does not match)
|
||||
|
||||
Code similarity due to Kernal API usage convention. Since 6510 CPU does not have indirect JSR, the only sane possibility to use Kernal API vectors in RAM ($0314-$0333) is to have JMP ($address) hardcoded somewhere. The jump table has intentionally strange order (to avoid code similarity as much as possible), but some small similarities can't be avoided in any reasonable way.
|
||||
Reference in new issue
Block a user