Implementing TGI
git-svn-id: svn://svn.cc65.org/cc65/trunk@1311 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
48
libsrc/tgi/tgi_map_mode.s
Normal file
48
libsrc/tgi/tgi_map_mode.s
Normal file
@@ -0,0 +1,48 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 31.05.2002
|
||||
;
|
||||
; const char* __fastcall__ tgi_map_mode (unsigned char mode);
|
||||
; /* Map tgi mode codes to driver names */
|
||||
;
|
||||
|
||||
.export _tgi_map_mode
|
||||
.import _tgi_mode_table
|
||||
.import return0
|
||||
.importzp tmp1
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; BEWARE: The current implementation of tgi_map_mode does not work with tables
|
||||
; larger that 255 bytes!
|
||||
|
||||
.code
|
||||
|
||||
_tgi_map_mode:
|
||||
sta tmp1 ; Save mode
|
||||
ldy #$00
|
||||
|
||||
@L0: lda _tgi_mode_table,y
|
||||
beq NotFound ; Branch if mode code zero
|
||||
cmp tmp1
|
||||
beq Found
|
||||
|
||||
; Skip the name
|
||||
|
||||
@L1: iny
|
||||
lda _tgi_mode_table,y
|
||||
bne @L1 ; Loop until end marker found
|
||||
iny ; Skip end marker
|
||||
bne @L0 ; Branch always
|
||||
|
||||
; Mode not found
|
||||
|
||||
NotFound:
|
||||
jmp return0
|
||||
|
||||
; Mode found
|
||||
|
||||
Found: tya
|
||||
ldx #>_tgi_mode_table
|
||||
sec ; Account for the mode byte
|
||||
adc #<_tgi_mode_table ; Return pointer to file name
|
||||
rts
|
||||
|
||||
Reference in New Issue
Block a user