jump table now uses vectors in RAM

This commit is contained in:
FeralChild64 committed 2019-08-05 18:08:15 +02:00
1 parent fb9caa7602
commit d5d6581901
32 files changed
+60 -140

No files matched your search

+1 -1
View File
@@ -20,7 +20,7 @@ print_string_loop:
lda (temp_string_ptr),y
beq print_string_end
jsr via_IBSOUT
jsr JCHROUT
txa
tay
+1 -1
View File
@@ -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
+5 -5
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -17,7 +17,7 @@ basic_do_break:
*
lda #$0d
jsr via_IBSOUT
jsr JCHROUT
cmd_end:
jmp basic_main_loop
+4 -4
View File
@@ -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
+3 -2
View File
@@ -191,6 +191,7 @@ end_of_line_search:
pla
sta basic_current_line_ptr+0
jmp basic_relink_loop
via_ILOAD:
jmp (ILOAD)
+1 -1
View File
@@ -115,7 +115,7 @@ found_start_of_number:
;; Print digits
* lda $0100,y
ora #$30
jsr via_IBSOUT
jsr JCHROUT
iny
cpy #5
bne -
+5 -5
View File
@@ -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
View File
@@ -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
-42
View File
@@ -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
View File
@@ -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
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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)
-21
View File
@@ -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
-3
View File
@@ -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.
-3
View File
@@ -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.
-3
View File
@@ -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.
-3
View File
@@ -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.
-3
View File
@@ -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.
-3
View File
@@ -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.
-4
View File
@@ -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.
-3
View File
@@ -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.
-3
View File
@@ -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.