Renamed the old geos target to geos-cbm.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5343 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
27
libsrc/geos-cbm/Makefile
Normal file
27
libsrc/geos-cbm/Makefile
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# Makefile for GEOS lib
|
||||
# for cc65
|
||||
#
|
||||
# Maciej 'YTM/Elysium' Witkowiak
|
||||
|
||||
OBJ_DIRS=common conio devel disk dlgbox file graph menuicon memory mousesprite process runtime system
|
||||
|
||||
all:
|
||||
@for i in $(OBJ_DIRS); do $(MAKE) -C $$i; done
|
||||
@for i in $(OBJ_DIRS); do $(AR) a ../geos-cbm.lib $$i/*.o; done
|
||||
|
||||
rebuild: zap all clean
|
||||
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@for i in $(OBJ_DIRS); do \
|
||||
cd $$i; \
|
||||
$(MAKE) clean; \
|
||||
cd ..; \
|
||||
done
|
||||
|
||||
.PHONY: zap
|
||||
zap: clean
|
||||
@$(RM) ../geos.lib
|
||||
|
||||
19
libsrc/geos-cbm/common/Makefile
Normal file
19
libsrc/geos-cbm/common/Makefile
Normal file
@@ -0,0 +1,19 @@
|
||||
#
|
||||
# Makefile for GEOS lib
|
||||
# for cc65
|
||||
#
|
||||
|
||||
%.o: %.c
|
||||
@$(CC) $(CFLAGS) $<
|
||||
@$(AS) -g -o $@ $(AFLAGS) $(*).s
|
||||
|
||||
%.o: %.s
|
||||
@$(AS) -o $@ $(AFLAGS) $<
|
||||
|
||||
C_OBJS = _afailed.o abort.o perror.o sleep.o
|
||||
S_OBJS = copydata.o memcpy.o memmove.o memset.o zerobss.o
|
||||
|
||||
all: $(C_OBJS) $(S_OBJS)
|
||||
|
||||
clean:
|
||||
@$(RM) core *.~ $(S_OBJS) $(C_OBJS:.o=.s) $(C_OBJS)
|
||||
33
libsrc/geos-cbm/common/_afailed.c
Normal file
33
libsrc/geos-cbm/common/_afailed.c
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* _afailed.c
|
||||
*
|
||||
* Maciej 'YTM/Elysium' Witkowiak 28.10.2001
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <geos.h>
|
||||
|
||||
void _afailed (char* file, unsigned line)
|
||||
{
|
||||
|
||||
ExitTurbo();
|
||||
|
||||
drawWindow.top = 0;
|
||||
drawWindow.left = 0;
|
||||
drawWindow.bot = 15;
|
||||
drawWindow.right = 150;
|
||||
dispBufferOn = ST_WR_FORE|ST_WR_BACK;
|
||||
SetPattern(0);
|
||||
Rectangle();
|
||||
FrameRectangle(0xff);
|
||||
|
||||
PutString(CBOLDON "file: ", 10, 10);
|
||||
PutString(file, 10, r11);
|
||||
PutString(CBOLDON " line: ", 10, r11);
|
||||
PutDecimal(0, line, 10, r11);
|
||||
|
||||
DlgBoxOk(CBOLDON "ASSERTION FAILED", "PROGRAM TERMINATED" CPLAINTEXT);
|
||||
|
||||
exit (2);
|
||||
}
|
||||
22
libsrc/geos-cbm/common/_poserror.c
Normal file
22
libsrc/geos-cbm/common/_poserror.c
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* _poserror.c
|
||||
*
|
||||
* Maciej 'YTM/Elysium' Witkowiak, 25.04.2003
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <geos.h>
|
||||
|
||||
void __fastcall__ _poserror (const char* msg)
|
||||
{
|
||||
const char *errmsg = _stroserror(_oserror);
|
||||
|
||||
ExitTurbo();
|
||||
if (msg && *msg) {
|
||||
DlgBoxOk(msg, errmsg);
|
||||
} else {
|
||||
DlgBoxOk("", errmsg);
|
||||
}
|
||||
}
|
||||
17
libsrc/geos-cbm/common/abort.c
Normal file
17
libsrc/geos-cbm/common/abort.c
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* abort.c
|
||||
*
|
||||
* Maciej 'YTM/Elysium' Witkowiak 15.7.2001
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <geos.h>
|
||||
|
||||
void abort (void)
|
||||
{
|
||||
ExitTurbo();
|
||||
DlgBoxOk(CBOLDON "ABNORMAL PROGRAM", "TERMINATION." CPLAINTEXT);
|
||||
exit(3);
|
||||
}
|
||||
27
libsrc/geos-cbm/common/copydata.s
Normal file
27
libsrc/geos-cbm/common/copydata.s
Normal file
@@ -0,0 +1,27 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak 15.07.2001
|
||||
;
|
||||
; Copy the data segment from the LOAD to the RUN location
|
||||
;
|
||||
|
||||
.export copydata
|
||||
.import __DATA_LOAD__, __DATA_RUN__, __DATA_SIZE__
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
copydata:
|
||||
lda #<__DATA_SIZE__ ; no need to check if it is == 0
|
||||
ldx #>__DATA_SIZE__
|
||||
sta r2L
|
||||
stx r2H
|
||||
|
||||
lda #<__DATA_RUN__
|
||||
ldx #>__DATA_RUN__
|
||||
sta r1L
|
||||
stx r1H
|
||||
|
||||
lda #<__DATA_LOAD__
|
||||
ldx #>__DATA_LOAD__
|
||||
sta r0L
|
||||
stx r0H
|
||||
jmp MoveData
|
||||
10
libsrc/geos-cbm/common/memcpy.s
Normal file
10
libsrc/geos-cbm/common/memcpy.s
Normal file
@@ -0,0 +1,10 @@
|
||||
;
|
||||
; void* __fastcall__ memcpy (void* dest, const void* src, size_t n);
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
|
||||
;
|
||||
|
||||
.export _memcpy
|
||||
.import _MoveData
|
||||
|
||||
_memcpy = _MoveData
|
||||
10
libsrc/geos-cbm/common/memmove.s
Normal file
10
libsrc/geos-cbm/common/memmove.s
Normal file
@@ -0,0 +1,10 @@
|
||||
;
|
||||
; void* __fastcall__ memmove (void* dest, const void* src, size_t n);
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
|
||||
;
|
||||
|
||||
.export _memmove
|
||||
.import _MoveData
|
||||
|
||||
_memmove = _MoveData
|
||||
14
libsrc/geos-cbm/common/memset.s
Normal file
14
libsrc/geos-cbm/common/memset.s
Normal file
@@ -0,0 +1,14 @@
|
||||
;
|
||||
; void* memset (void* ptr, int c, size_t n);
|
||||
; void* _bzero (void* ptr, size_t n);
|
||||
; void bzero (void* ptr, size_t n);
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak, 20.08.2003
|
||||
;
|
||||
|
||||
.export _memset, _bzero, __bzero
|
||||
.import _ClearRam, _FillRam
|
||||
|
||||
_bzero = _ClearRam
|
||||
__bzero = _ClearRam
|
||||
_memset = _FillRam
|
||||
22
libsrc/geos-cbm/common/perror.c
Normal file
22
libsrc/geos-cbm/common/perror.c
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* perror.c
|
||||
*
|
||||
* Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <geos.h>
|
||||
|
||||
void __fastcall__ perror(const char* msg)
|
||||
{
|
||||
const char *errmsg = strerror(errno);
|
||||
|
||||
ExitTurbo();
|
||||
if (msg && *msg) {
|
||||
DlgBoxOk(msg, errmsg);
|
||||
} else {
|
||||
DlgBoxOk("", errmsg);
|
||||
}
|
||||
}
|
||||
23
libsrc/geos-cbm/common/sleep.c
Normal file
23
libsrc/geos-cbm/common/sleep.c
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* sleep.c
|
||||
*
|
||||
* Maciej 'YTM/Elysium' Witkowiak, 16.08.2003
|
||||
*
|
||||
*/
|
||||
|
||||
#include <geos.h>
|
||||
|
||||
unsigned __fastcall__ sleep (unsigned wait)
|
||||
{
|
||||
char typ;
|
||||
|
||||
if ( (get_tv()) & TV_NTSC ) {
|
||||
typ = 60;
|
||||
} else {
|
||||
typ = 50;
|
||||
}
|
||||
|
||||
Sleep(wait*typ);
|
||||
|
||||
return 0;
|
||||
}
|
||||
25
libsrc/geos-cbm/common/zerobss.s
Normal file
25
libsrc/geos-cbm/common/zerobss.s
Normal file
@@ -0,0 +1,25 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
|
||||
; 23.12.2002
|
||||
;
|
||||
; Zero the bss segment.
|
||||
;
|
||||
|
||||
.export zerobss
|
||||
.import __BSS_RUN__, __BSS_SIZE__
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.code
|
||||
|
||||
zerobss:
|
||||
lda #<__BSS_SIZE__
|
||||
ldx #>__BSS_SIZE__
|
||||
sta r0L
|
||||
stx r0H
|
||||
lda #<__BSS_RUN__
|
||||
ldx #>__BSS_RUN__
|
||||
sta r1L
|
||||
stx r1H
|
||||
jmp ClearRam
|
||||
17
libsrc/geos-cbm/conio/Makefile
Normal file
17
libsrc/geos-cbm/conio/Makefile
Normal file
@@ -0,0 +1,17 @@
|
||||
#
|
||||
# Makefile for GEOS lib
|
||||
# for cc65
|
||||
#
|
||||
|
||||
%.o: %.s
|
||||
@$(AS) -o $@ $(AFLAGS) $<
|
||||
|
||||
|
||||
S_OBJS = cclear.o chline.o cvline.o cgetc.o clrscr.o color.o\
|
||||
cputc.o cpputs.o cursor.o gotoxy.o kbhit.o revers.o\
|
||||
where.o _scrsize.o
|
||||
|
||||
all: $(S_OBJS)
|
||||
|
||||
clean:
|
||||
@$(RM) *.~ $(S_OBJS) core
|
||||
44
libsrc/geos-cbm/conio/_scrsize.s
Normal file
44
libsrc/geos-cbm/conio/_scrsize.s
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; Screen size variables
|
||||
;
|
||||
; 6.3.2001, 17.4.2003
|
||||
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.export xsize, ysize
|
||||
.export screensize
|
||||
.importzp cursor_r, cursor_c
|
||||
.import _cursor
|
||||
.constructor initscrsize
|
||||
|
||||
.segment "INIT"
|
||||
|
||||
initscrsize:
|
||||
lda graphMode
|
||||
bpl L1
|
||||
lda #80 ; 80 columns (more or less)
|
||||
.byte $2c
|
||||
L1: lda #40 ; 40 columns (more or less)
|
||||
sta xsize
|
||||
lda #24 ; something like that for Y size
|
||||
sta ysize
|
||||
ldx #1
|
||||
stx cursor_r
|
||||
dex
|
||||
stx cursor_c
|
||||
txa
|
||||
jmp _cursor ; home and update cursor
|
||||
|
||||
screensize:
|
||||
ldx xsize
|
||||
ldy ysize
|
||||
rts
|
||||
|
||||
.bss
|
||||
|
||||
xsize: .res 1
|
||||
ysize: .res 1
|
||||
51
libsrc/geos-cbm/conio/cclear.s
Normal file
51
libsrc/geos-cbm/conio/cclear.s
Normal file
@@ -0,0 +1,51 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 06.03.2002
|
||||
|
||||
; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
|
||||
; void cclear (unsigned char length);
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.export _cclearxy, _cclear
|
||||
.import popa, _gotoxy, fixcursor
|
||||
.importzp cursor_x, cursor_y, cursor_c
|
||||
|
||||
_cclearxy:
|
||||
pha ; Save the length
|
||||
jsr popa ; Get y
|
||||
jsr _gotoxy ; Call this one, will pop params
|
||||
pla ; Restore the length
|
||||
|
||||
_cclear:
|
||||
cmp #0 ; Is the length zero?
|
||||
beq L9 ; Jump if done
|
||||
tax
|
||||
lda cursor_x ; left start
|
||||
sta r3L
|
||||
lda cursor_x+1
|
||||
sta r3L+1
|
||||
lda cursor_y ; level
|
||||
sta r2L
|
||||
clc
|
||||
adc #8
|
||||
sta r2H
|
||||
txa ; right end
|
||||
clc
|
||||
adc cursor_c
|
||||
sta cursor_c
|
||||
sta r4L
|
||||
ldx #r4
|
||||
ldy #3
|
||||
jsr DShiftLeft
|
||||
lda curPattern ; store current pattern
|
||||
pha
|
||||
lda #0 ; set pattern to clear
|
||||
jsr SetPattern
|
||||
jsr Rectangle
|
||||
pla
|
||||
jsr SetPattern ; restore pattern
|
||||
jsr fixcursor
|
||||
L9: rts
|
||||
40
libsrc/geos-cbm/conio/cgetc.s
Normal file
40
libsrc/geos-cbm/conio/cgetc.s
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
; 06.03.2002
|
||||
|
||||
; unsigned char cgetc (void);
|
||||
|
||||
.export _cgetc
|
||||
.import update_cursor
|
||||
.importzp cursor_x, cursor_y, cursor_flag
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_cgetc:
|
||||
; show cursor if needed
|
||||
lda cursor_flag
|
||||
beq L0
|
||||
|
||||
jsr update_cursor
|
||||
lda cursor_x
|
||||
ldx cursor_x+1
|
||||
sta stringX
|
||||
stx stringX+1
|
||||
lda cursor_y
|
||||
sec
|
||||
sbc curHeight
|
||||
sta stringY
|
||||
jsr PromptOn
|
||||
|
||||
L0: jsr GetNextChar
|
||||
tax
|
||||
beq L0
|
||||
pha
|
||||
jsr PromptOff
|
||||
pla
|
||||
ldx #0
|
||||
rts
|
||||
45
libsrc/geos-cbm/conio/chline.s
Normal file
45
libsrc/geos-cbm/conio/chline.s
Normal file
@@ -0,0 +1,45 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 06.03.2002
|
||||
|
||||
; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||||
; void chline (unsigned char length);
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.export _chlinexy, _chline
|
||||
.import popa, _gotoxy, fixcursor
|
||||
.importzp cursor_x, cursor_y, cursor_c
|
||||
|
||||
_chlinexy:
|
||||
pha ; Save the length
|
||||
jsr popa ; Get y
|
||||
jsr _gotoxy ; Call this one, will pop params
|
||||
pla ; Restore the length
|
||||
|
||||
_chline:
|
||||
cmp #0 ; Is the length zero?
|
||||
beq L9 ; Jump if done
|
||||
tax
|
||||
lda cursor_x ; left start
|
||||
sta r3L
|
||||
lda cursor_x+1
|
||||
sta r3L+1
|
||||
lda cursor_y ; level
|
||||
sec
|
||||
sbc #4 ; in the middle of a cell
|
||||
sta r11L
|
||||
txa ; right end
|
||||
clc
|
||||
adc cursor_c
|
||||
sta cursor_c
|
||||
sta r4L
|
||||
ldx #r4
|
||||
ldy #3
|
||||
jsr DShiftLeft
|
||||
lda #%11111111 ; pattern
|
||||
jsr HorizontalLine
|
||||
jsr fixcursor
|
||||
L9: rts
|
||||
46
libsrc/geos-cbm/conio/clrscr.s
Normal file
46
libsrc/geos-cbm/conio/clrscr.s
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001, 23.12.2002
|
||||
|
||||
; void clrscr (void);
|
||||
|
||||
.export _clrscr
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.import fixcursor
|
||||
.importzp cursor_c, cursor_r
|
||||
|
||||
_clrscr:
|
||||
lda #ST_WR_FORE | ST_WR_BACK
|
||||
sta dispBufferOn
|
||||
lda curPattern ; save current pattern
|
||||
pha
|
||||
lda #0 ; set pattern to clear
|
||||
jsr SetPattern
|
||||
ldx #0
|
||||
stx r3L
|
||||
stx r3H
|
||||
stx r2L
|
||||
stx cursor_c
|
||||
inx
|
||||
stx cursor_r
|
||||
jsr fixcursor ; home cursor
|
||||
lda #199
|
||||
sta r2H
|
||||
lda graphMode
|
||||
bpl L40
|
||||
lda #>639 ; 80 columns
|
||||
ldx #<639
|
||||
bne L99
|
||||
L40: lda #>319 ; 40 columns
|
||||
ldx #<319
|
||||
L99: sta r4H
|
||||
stx r4L
|
||||
jsr Rectangle
|
||||
pla
|
||||
jmp SetPattern ; restore pattern
|
||||
20
libsrc/geos-cbm/conio/color.s
Normal file
20
libsrc/geos-cbm/conio/color.s
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
|
||||
; unsigned char __fastcall__ textcolor (unsigned char color);
|
||||
; unsigned char __fastcall__ bgcolor (unsigned char color);
|
||||
; unsigned char __fastcall__ bordercolor (unsigned char color);
|
||||
;
|
||||
|
||||
|
||||
.export _textcolor, _bgcolor, _bordercolor
|
||||
|
||||
; for GEOS 2.0 there is no color support, perhaps Wheels has it
|
||||
|
||||
_textcolor:
|
||||
_bgcolor:
|
||||
_bordercolor:
|
||||
rts
|
||||
45
libsrc/geos-cbm/conio/cpputs.s
Normal file
45
libsrc/geos-cbm/conio/cpputs.s
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
; 05.03.2002
|
||||
|
||||
; void cpputsxy (unsigned char x, unsigned char y, char* s);
|
||||
; void cpputs (char* s);
|
||||
|
||||
; same as cputsxy and cputs but faster and use proportional font spacing
|
||||
; does not update cursor position
|
||||
|
||||
.export _cpputsxy, _cpputs
|
||||
|
||||
.import _gotoxy
|
||||
.import popa
|
||||
.importzp cursor_x, cursor_y
|
||||
|
||||
.include "../inc/const.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_cpputsxy:
|
||||
sta r0L ; Save s for later
|
||||
stx r0H
|
||||
jsr popa ; Get Y
|
||||
jsr _gotoxy ; Set cursor, pop x
|
||||
jmp L0 ; Same as cputs...
|
||||
|
||||
_cpputs:
|
||||
sta r0L ; Save s
|
||||
stx r0H
|
||||
L0: ldy #0
|
||||
lda (r0),y
|
||||
bne L1 ; Jump if there's something
|
||||
rts
|
||||
|
||||
L1: lda cursor_x
|
||||
sta r11L
|
||||
lda cursor_x+1
|
||||
sta r11H
|
||||
lda cursor_y
|
||||
sta r1H
|
||||
jmp PutString
|
||||
102
libsrc/geos-cbm/conio/cputc.s
Normal file
102
libsrc/geos-cbm/conio/cputc.s
Normal file
@@ -0,0 +1,102 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
; 06.03.2002
|
||||
; 25.07.2005
|
||||
|
||||
; void cputcxy (unsigned char x, unsigned char y, char c);
|
||||
; void cputc (char c);
|
||||
|
||||
; TODO:
|
||||
; TAB (should be implemented)
|
||||
; other special characters directly from keyboard are unsafe, though some might be
|
||||
; implemented:
|
||||
; HOME, UPLINE, ULINEON, ULINEOFF, REV_ON, REV_OFF, BOLDON, ITALICON, OUTLINEON, PLAINTEXT
|
||||
; and cursor movement, maybe stuff like INSERT too
|
||||
;
|
||||
; these must be ignored:
|
||||
; ESC_GRAPHICS, ESC_RULER, GOTOX, GOTOY, GOTOXY, NEWCARDSET, all 1..8
|
||||
;
|
||||
; note that there are conflicts between control characters and keyboard:
|
||||
; HOME = KEY_ENTER, KEY_HOME = REV_ON,
|
||||
; UPLINE = ?, KEY_UPARROW = GOTOY, ...
|
||||
|
||||
.export _cputcxy, _cputc, update_cursor
|
||||
|
||||
.import _gotoxy, fixcursor
|
||||
.import popa
|
||||
.import xsize,ysize
|
||||
.importzp cursor_x, cursor_y, cursor_c, cursor_r
|
||||
|
||||
.include "../inc/const.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_cputcxy:
|
||||
pha ; Save C
|
||||
jsr popa ; Get Y
|
||||
jsr _gotoxy ; Set cursor, drop x
|
||||
pla ; Restore C
|
||||
|
||||
; Plot a character - also used as internal function
|
||||
|
||||
_cputc:
|
||||
tax ; save character
|
||||
; some characters 0-31 are not safe for PutChar
|
||||
cmp #$20
|
||||
bcs L1
|
||||
cmp #CR
|
||||
beq do_cr
|
||||
cmp #LF
|
||||
beq do_lf
|
||||
cmp #KEY_DELETE
|
||||
bne L0
|
||||
ldx #BACKSPACE
|
||||
sec
|
||||
bcs L2
|
||||
L0: rts
|
||||
|
||||
L1: clc
|
||||
L2: php
|
||||
lda cursor_x
|
||||
sta r11L
|
||||
lda cursor_x+1
|
||||
sta r11H
|
||||
lda cursor_y
|
||||
sta r1H
|
||||
txa
|
||||
jsr PutChar
|
||||
plp
|
||||
bcs update_cursor
|
||||
|
||||
inc cursor_c
|
||||
lda cursor_c
|
||||
cmp xsize ; hit right margin?
|
||||
bne update_cursor
|
||||
lda #0 ; yes - do cr+lf
|
||||
sta cursor_c
|
||||
do_lf: inc cursor_r
|
||||
lda cursor_r
|
||||
cmp ysize ; hit bottom margin?
|
||||
bne update_cursor
|
||||
dec cursor_r ; yes - stay in the last line
|
||||
|
||||
update_cursor:
|
||||
jsr fixcursor
|
||||
lda cursor_x
|
||||
sta r4L
|
||||
lda cursor_x+1
|
||||
sta r4H
|
||||
lda cursor_y
|
||||
sec
|
||||
sbc curHeight
|
||||
sta r5L
|
||||
lda #1 ; update cursor prompt position
|
||||
sta r3L
|
||||
jmp PosSprite
|
||||
|
||||
do_cr: lda #0
|
||||
sta cursor_c
|
||||
beq update_cursor
|
||||
28
libsrc/geos-cbm/conio/cursor.s
Normal file
28
libsrc/geos-cbm/conio/cursor.s
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001, 23.12.2002
|
||||
|
||||
; unsigned char cursor (unsigned char onoff);
|
||||
|
||||
.export _cursor
|
||||
.import update_cursor
|
||||
.importzp cursor_flag
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_cursor:
|
||||
|
||||
tay ; onoff into Y
|
||||
ldx #0 ; High byte of result
|
||||
lda cursor_flag ; Get old value
|
||||
pha
|
||||
sty cursor_flag ; Set new value
|
||||
tya
|
||||
beq L1
|
||||
lda curHeight ; prepare cursor
|
||||
jsr InitTextPrompt
|
||||
jsr update_cursor ; place it on screen
|
||||
L1: pla
|
||||
rts
|
||||
46
libsrc/geos-cbm/conio/cvline.s
Normal file
46
libsrc/geos-cbm/conio/cvline.s
Normal file
@@ -0,0 +1,46 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 06.03.2002
|
||||
|
||||
; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||||
; void cvline (unsigned char length);
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.export _cvlinexy, _cvline
|
||||
.import popa, _gotoxy, fixcursor
|
||||
.importzp cursor_x, cursor_y, cursor_r
|
||||
|
||||
_cvlinexy:
|
||||
pha ; Save the length
|
||||
jsr popa ; Get y
|
||||
jsr _gotoxy ; Call this one, will pop params
|
||||
pla ; Restore the length
|
||||
|
||||
_cvline:
|
||||
cmp #0 ; Is the length zero?
|
||||
beq L9 ; Jump if done
|
||||
tax
|
||||
lda cursor_x ; x position
|
||||
clc
|
||||
adc #4 ; in the middle of cell
|
||||
sta r4L
|
||||
lda cursor_x+1
|
||||
adc #0
|
||||
sta r4L+1
|
||||
lda cursor_y ; top start
|
||||
sta r3L
|
||||
txa ; bottom end
|
||||
clc
|
||||
adc cursor_r
|
||||
sta cursor_r
|
||||
sta r3H
|
||||
asl r3H
|
||||
asl r3H
|
||||
asl r3H
|
||||
lda #%11111111 ; pattern
|
||||
jsr VerticalLine
|
||||
jsr fixcursor
|
||||
L9: rts
|
||||
44
libsrc/geos-cbm/conio/gotoxy.s
Normal file
44
libsrc/geos-cbm/conio/gotoxy.s
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
; 06.03.2002
|
||||
|
||||
; void gotox (unsigned char x);
|
||||
; void gotoy (unsigned char y);
|
||||
; void gotoxy (unsigned char x, unsigned char y);
|
||||
|
||||
.export _gotox, _gotoy, _gotoxy, fixcursor
|
||||
.import popa
|
||||
.importzp cursor_x, cursor_y, cursor_c, cursor_r
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_gotox: sta cursor_c
|
||||
jmp fixcursor
|
||||
|
||||
_gotoy: sta cursor_r
|
||||
inc cursor_r
|
||||
jmp fixcursor
|
||||
|
||||
_gotoxy: sta cursor_r
|
||||
inc cursor_r
|
||||
jsr popa
|
||||
sta cursor_c
|
||||
|
||||
; convert 8x8 x/y coordinates to GEOS hires
|
||||
fixcursor:
|
||||
lda cursor_c
|
||||
sta cursor_x
|
||||
lda #0
|
||||
sta cursor_x+1
|
||||
lda cursor_r
|
||||
sta cursor_y
|
||||
ldx #cursor_x
|
||||
ldy #3
|
||||
jsr DShiftLeft
|
||||
asl cursor_y
|
||||
asl cursor_y
|
||||
asl cursor_y
|
||||
rts
|
||||
22
libsrc/geos-cbm/conio/kbhit.s
Normal file
22
libsrc/geos-cbm/conio/kbhit.s
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
|
||||
; unsigned char kbhit (void);
|
||||
|
||||
.export _kbhit
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.proc _kbhit
|
||||
|
||||
ldx #0 ; High byte of result
|
||||
lda pressFlag
|
||||
rol ; Bit 7 is new key flag
|
||||
txa ; A = 0
|
||||
rol
|
||||
rts
|
||||
|
||||
.endproc
|
||||
36
libsrc/geos-cbm/conio/revers.s
Normal file
36
libsrc/geos-cbm/conio/revers.s
Normal file
@@ -0,0 +1,36 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
|
||||
; unsigned char revers (unsigned char onoff);
|
||||
|
||||
.export _revers
|
||||
.importzp tmp1
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
_revers:
|
||||
tax
|
||||
bne L0 ; turn on
|
||||
lda #0
|
||||
.byte $2c
|
||||
L0: lda #SET_REVERSE
|
||||
sta tmp1
|
||||
|
||||
lda currentMode
|
||||
tax
|
||||
and #SET_REVERSE
|
||||
tay ; store old value
|
||||
txa
|
||||
and #%11011111 ; mask out
|
||||
ora tmp1 ; set new value
|
||||
sta currentMode
|
||||
|
||||
ldx #0
|
||||
tya
|
||||
beq L1
|
||||
lda #1
|
||||
L1: rts
|
||||
21
libsrc/geos-cbm/conio/where.s
Normal file
21
libsrc/geos-cbm/conio/where.s
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 27.10.2001
|
||||
; 06.03.2002
|
||||
; 02.01.2003
|
||||
|
||||
; unsigned char wherex (void);
|
||||
; unsigned char wherey (void);
|
||||
|
||||
.export _wherex, _wherey
|
||||
.importzp cursor_c, cursor_r
|
||||
|
||||
_wherex: lda cursor_c
|
||||
ldx #0
|
||||
rts
|
||||
|
||||
_wherey: lda cursor_r
|
||||
ldx #0
|
||||
rts
|
||||
57
libsrc/geos-cbm/devel/Makefile
Normal file
57
libsrc/geos-cbm/devel/Makefile
Normal file
@@ -0,0 +1,57 @@
|
||||
# -*- make -*-
|
||||
#
|
||||
# Makefile for GEOS lib
|
||||
# for cc65
|
||||
#
|
||||
|
||||
%.o: %.s
|
||||
@$(AS) -g -o $@ $(AFLAGS) $<
|
||||
|
||||
%.emd: %.o ../../runtime/zeropage.o
|
||||
@$(LD) -o $@ -t module $^
|
||||
|
||||
%.joy: %.o ../../runtime/zeropage.o
|
||||
@$(LD) -o $@ -t module $^
|
||||
|
||||
%.mou: %.o ../../runtime/zeropage.o
|
||||
@$(LD) -o $@ -t module $^
|
||||
|
||||
%.ser: %.o ../../runtime/zeropage.o
|
||||
@$(LD) -o $@ -t module $^
|
||||
|
||||
%.tgi: %.o ../../runtime/zeropage.o
|
||||
@$(LD) -o $@ -t module $^
|
||||
|
||||
S_OBJS = crt0.o \
|
||||
extzp.o \
|
||||
fio_module.o \
|
||||
joy_stddrv.o \
|
||||
mainargs.o \
|
||||
mcbdefault.o \
|
||||
mouse_stddrv.o \
|
||||
oserror.o \
|
||||
oserrlist.o \
|
||||
randomize.o \
|
||||
tgi_colors.o \
|
||||
tgi_stddrv.o
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# Drivers
|
||||
|
||||
EMDS = geos-vdc.emd
|
||||
|
||||
JOYS = geos-stdjoy.joy
|
||||
|
||||
MOUS = #geos-stdmou.mou
|
||||
|
||||
SERS =
|
||||
|
||||
TGIS = geos-tgi.tgi
|
||||
|
||||
all: $(S_OBJS) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS)
|
||||
|
||||
../../runtime/zeropage.o:
|
||||
$(MAKE) -C $(dir $@) $(notdir $@)
|
||||
|
||||
clean:
|
||||
@$(RM) *.~ core $(S_OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(MOUS:.mou=.o) $(SERS:.ser=.o) $(TGIS:.tgi=.o)
|
||||
47
libsrc/geos-cbm/devel/crt0.s
Normal file
47
libsrc/geos-cbm/devel/crt0.s
Normal file
@@ -0,0 +1,47 @@
|
||||
;
|
||||
; Startup code for geos
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
; 26.10.99, 10.3.2000, 15.8.2001, 23.12.2002
|
||||
|
||||
.export _exit
|
||||
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
||||
|
||||
.import __VLIR0_START__, __VLIR0_SIZE__ ; Linker generated
|
||||
.import __STACKSIZE__ ; Linker generated
|
||||
.import initlib, donelib
|
||||
.import callmain
|
||||
.import zerobss
|
||||
.importzp sp
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Place the startup code in a special segment.
|
||||
|
||||
.segment "STARTUP"
|
||||
|
||||
; Clear the BSS data
|
||||
|
||||
jsr zerobss
|
||||
|
||||
; Setup stack
|
||||
|
||||
lda #<(__VLIR0_START__ + __VLIR0_SIZE__ + __STACKSIZE__)
|
||||
sta sp
|
||||
lda #>(__VLIR0_START__ + __VLIR0_SIZE__ + __STACKSIZE__)
|
||||
sta sp+1 ; Set argument stack ptr
|
||||
|
||||
; Call module constructors
|
||||
|
||||
jsr initlib
|
||||
|
||||
; Push arguments and call main()
|
||||
|
||||
cli
|
||||
jsr callmain
|
||||
|
||||
; Call module destructors.
|
||||
|
||||
_exit: jsr donelib ; Run module destructors
|
||||
|
||||
jmp EnterDeskTop ; return control to the system
|
||||
18
libsrc/geos-cbm/devel/extzp.s
Normal file
18
libsrc/geos-cbm/devel/extzp.s
Normal file
@@ -0,0 +1,18 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
|
||||
; 31.12.2002
|
||||
;
|
||||
; zeropage locations for exclusive use by the library
|
||||
;
|
||||
|
||||
.exportzp cursor_x, cursor_y, cursor_flag
|
||||
.exportzp cursor_c, cursor_r
|
||||
|
||||
.segment "EXTZP" : zeropage
|
||||
|
||||
cursor_x: .res 2 ; Cursor column (0-319/639)
|
||||
cursor_y: .res 1 ; Cursor row (0-199)
|
||||
cursor_flag: .res 1 ; Cursor on/off (0-off)
|
||||
|
||||
cursor_c: .res 1 ; Cursor column (0-39/79)
|
||||
cursor_r: .res 1 ; Cursor row (0-24)
|
||||
191
libsrc/geos-cbm/devel/fio_module.s
Normal file
191
libsrc/geos-cbm/devel/fio_module.s
Normal file
@@ -0,0 +1,191 @@
|
||||
;
|
||||
; Low level file I/O routines, ONLY for module loading OR sth similar
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
|
||||
; 25.12.2002
|
||||
;
|
||||
; only ONE opened file at a time, only O_RDONLY flag
|
||||
|
||||
; int open (const char* name, int flags, ...); /* May take a mode argument */
|
||||
; int __fastcall__ close (int fd);
|
||||
; int __fastcall__ read (int fd, void* buf, unsigned count);
|
||||
|
||||
FILEDES = 3 ; first free to use file descriptor
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
.include "errno.inc"
|
||||
.include "fcntl.inc"
|
||||
|
||||
.importzp ptr1, ptr2, ptr3, tmp1
|
||||
.import addysp, popax
|
||||
.import __oserror
|
||||
.import _FindFile, _ReadByte
|
||||
|
||||
.export _open, _close, _read
|
||||
|
||||
|
||||
;--------------------------------------------------------------------------
|
||||
; _open
|
||||
|
||||
_open:
|
||||
|
||||
cpy #4 ; correct # of arguments (bytes)?
|
||||
beq @parmok ; parameter count ok
|
||||
tya ; parm count < 4 shouldn't be needed to be...
|
||||
sec ; ...checked (it generates a c compiler warning)
|
||||
sbc #4
|
||||
tay
|
||||
jsr addysp ; fix stack, throw away unused parameters
|
||||
|
||||
; Parameters ok. Pop the flags and save them into tmp3
|
||||
|
||||
@parmok:
|
||||
jsr popax ; Get flags
|
||||
sta tmp1
|
||||
jsr popax ; Get name
|
||||
sta ptr1
|
||||
stx ptr1+1
|
||||
|
||||
lda filedesc ; is there a file already open?
|
||||
bne @alreadyopen
|
||||
|
||||
lda tmp1 ; check open mode
|
||||
and #(O_RDWR | O_CREAT)
|
||||
cmp #O_RDONLY ; only O_RDONLY is valid
|
||||
bne @badmode
|
||||
|
||||
lda ptr1
|
||||
ldx ptr1+1
|
||||
jsr _FindFile ; try to find the file
|
||||
tax
|
||||
bne @oserror
|
||||
|
||||
lda dirEntryBuf + OFF_DE_TR_SC ; tr&se for ReadByte (r1)
|
||||
sta f_track
|
||||
lda dirEntryBuf + OFF_DE_TR_SC + 1
|
||||
sta f_sector
|
||||
lda #<diskBlkBuf ; buffer for ReadByte (r4)
|
||||
sta f_buffer
|
||||
lda #>diskBlkBuf
|
||||
sta f_buffer+1
|
||||
ldx #0 ; offset for ReadByte (r5)
|
||||
stx f_offset
|
||||
stx f_offset+1
|
||||
lda #0 ; clear errors
|
||||
sta __oserror
|
||||
jsr __seterrno
|
||||
lda #FILEDES ; return fd
|
||||
sta filedesc
|
||||
rts
|
||||
@badmode:
|
||||
lda #EINVAL ; invalid parameters - invalid open mode
|
||||
.byte $2c ; skip
|
||||
@alreadyopen:
|
||||
lda #EMFILE ; too many opened files (there can be only one)
|
||||
jmp __directerrno ; set errno, clear oserror, return -1
|
||||
@oserror:
|
||||
jmp __mappederrno ; set platform error code, return -1
|
||||
|
||||
_close:
|
||||
lda #0
|
||||
sta __oserror
|
||||
jsr __seterrno ; clear errors
|
||||
lda #0 ; clear fd
|
||||
sta filedesc
|
||||
tax
|
||||
rts
|
||||
|
||||
_read:
|
||||
; a/x - number of bytes
|
||||
; popax - buffer ptr
|
||||
; popax - fd, must be == to the above one
|
||||
; return -1+__oserror or number of bytes read
|
||||
|
||||
eor #$ff
|
||||
sta ptr1
|
||||
txa
|
||||
eor #$ff
|
||||
sta ptr1+1 ; -(# of bytes to read)-1
|
||||
jsr popax
|
||||
sta ptr2
|
||||
stx ptr2+1 ; buffer ptr
|
||||
jsr popax
|
||||
cmp #FILEDES ; lo-byte == FILEDES
|
||||
bne @filenotopen
|
||||
txa ; hi-byte == 0
|
||||
beq @fileok ; fd must be == FILEDES
|
||||
|
||||
@filenotopen:
|
||||
lda #EBADF
|
||||
jmp __directerrno ; Sets _errno, clears _oserror, returns -1
|
||||
|
||||
@fileok:
|
||||
lda #0
|
||||
sta ptr3
|
||||
sta ptr3+1 ; put 0 into ptr3 (number of bytes read)
|
||||
sta __oserror ; clear error flags
|
||||
jsr __seterrno
|
||||
|
||||
lda f_track ; restore stuff for ReadByte
|
||||
ldx f_sector
|
||||
sta r1L
|
||||
stx r1H
|
||||
lda f_buffer
|
||||
ldx f_buffer+1
|
||||
sta r4L
|
||||
stx r4H
|
||||
lda f_offset
|
||||
ldx f_offset+1
|
||||
sta r5L
|
||||
stx r5H
|
||||
|
||||
clc
|
||||
bcc @L3 ; branch always
|
||||
|
||||
@L0: jsr _ReadByte
|
||||
ldy #0 ; store the byte
|
||||
sta (ptr2),y
|
||||
inc ptr2 ; increment target address
|
||||
bne @L1
|
||||
inc ptr2+1
|
||||
|
||||
@L1: inc ptr3 ; increment byte count
|
||||
bne @L2
|
||||
inc ptr3+1
|
||||
|
||||
@L2: lda __oserror ; was there error ?
|
||||
beq @L3
|
||||
cmp #BFR_OVERFLOW ; EOF?
|
||||
beq @done ; yes, we're done
|
||||
jmp __mappederrno ; no, we're screwed
|
||||
|
||||
@L3: inc ptr1 ; decrement the count
|
||||
bne @L0
|
||||
inc ptr1+1
|
||||
bne @L0
|
||||
|
||||
@done:
|
||||
lda r1L ; preserve data for ReadByte
|
||||
ldx r1H
|
||||
sta f_track
|
||||
stx f_sector
|
||||
lda r4L
|
||||
ldx r4H
|
||||
sta f_buffer
|
||||
stx f_buffer+1
|
||||
lda r5L
|
||||
ldx r5H
|
||||
sta f_offset
|
||||
stx f_offset+1
|
||||
|
||||
lda ptr3 ; return byte count
|
||||
ldx ptr3+1
|
||||
rts
|
||||
|
||||
.bss
|
||||
filedesc: .res 1 ; file open flag - 0 (no file opened) or 1
|
||||
f_track: .res 1 ; values preserved for ReadByte
|
||||
f_sector: .res 1
|
||||
f_offset: .res 2
|
||||
f_buffer: .res 2
|
||||
126
libsrc/geos-cbm/devel/geos-stdjoy.s
Normal file
126
libsrc/geos-cbm/devel/geos-stdjoy.s
Normal file
@@ -0,0 +1,126 @@
|
||||
;
|
||||
; Standard joystick driver for the C64. May be used multiple times when linked
|
||||
; to the statically application.
|
||||
;
|
||||
; Ullrich von Bassewitz, 2002-12-20
|
||||
;
|
||||
|
||||
.include "zeropage.inc"
|
||||
|
||||
.include "joy-kernel.inc"
|
||||
.include "joy-error.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.macpack generic
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Header. Includes jump table
|
||||
|
||||
.segment "JUMPTABLE"
|
||||
|
||||
; Driver signature
|
||||
|
||||
.byte $6A, $6F, $79 ; "joy"
|
||||
.byte JOY_API_VERSION ; Driver API version number
|
||||
|
||||
; Button state masks (8 values)
|
||||
|
||||
.byte $01 ; JOY_UP
|
||||
.byte $02 ; JOY_DOWN
|
||||
.byte $04 ; JOY_LEFT
|
||||
.byte $08 ; JOY_RIGHT
|
||||
.byte $10 ; JOY_FIRE
|
||||
.byte $00 ; Future expansion
|
||||
.byte $00 ; Future expansion
|
||||
.byte $00 ; Future expansion
|
||||
|
||||
; Jump table.
|
||||
|
||||
.word INSTALL
|
||||
.word UNINSTALL
|
||||
.word COUNT
|
||||
.word READ
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Constants
|
||||
|
||||
JOY_COUNT = 2 ; Number of joysticks we support
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Data.
|
||||
|
||||
|
||||
.code
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; INSTALL routine. Is called after the driver is loaded into memory. If
|
||||
; possible, check if the hardware is present and determine the amount of
|
||||
; memory available.
|
||||
; Must return an JOY_ERR_xx code in a/x.
|
||||
;
|
||||
|
||||
INSTALL:
|
||||
lda #<JOY_ERR_OK
|
||||
ldx #>JOY_ERR_OK
|
||||
; rts ; Run into UNINSTALL instead
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; UNINSTALL routine. Is called before the driver is removed from memory.
|
||||
; Can do cleanup or whatever. Must not return anything.
|
||||
;
|
||||
|
||||
UNINSTALL:
|
||||
rts
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; COUNT: Return the total number of available joysticks in a/x.
|
||||
;
|
||||
|
||||
COUNT:
|
||||
lda #<JOY_COUNT
|
||||
ldx #>JOY_COUNT
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; READ: Read a particular joystick passed in A.
|
||||
;
|
||||
|
||||
READ:
|
||||
tax
|
||||
php
|
||||
sei ; disable IRQ
|
||||
lda $01
|
||||
pha
|
||||
lda #$35
|
||||
sta $01 ; enable I/O
|
||||
|
||||
txa ; Joystick number into X
|
||||
bne joy2
|
||||
|
||||
; Read joystick 1
|
||||
|
||||
joy1:
|
||||
lda #$7F
|
||||
sta cia1base
|
||||
lda cia1base+1
|
||||
back: tay
|
||||
pla
|
||||
sta $01
|
||||
plp
|
||||
tya
|
||||
and #$1F
|
||||
eor #$1F
|
||||
rts
|
||||
|
||||
; Read joystick 2
|
||||
|
||||
joy2: ldx #0
|
||||
lda #$E0
|
||||
ldy #$FF
|
||||
sta cia1base+2
|
||||
lda cia1base+1
|
||||
sty cia1base+2
|
||||
jmp back
|
||||
673
libsrc/geos-cbm/devel/geos-tgi.s
Normal file
673
libsrc/geos-cbm/devel/geos-tgi.s
Normal file
@@ -0,0 +1,673 @@
|
||||
;
|
||||
; Graphics driver for the 320x200x2 and 640x200x2 modes on GEOS 64/128
|
||||
; 2010-08-17, Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
|
||||
; 2010-08-18, Greg King
|
||||
|
||||
.include "zeropage.inc"
|
||||
|
||||
.include "tgi-kernel.inc"
|
||||
.include "tgi-error.inc"
|
||||
|
||||
.include "../inc/const.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/geossym2.inc"
|
||||
|
||||
.macpack generic
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Constants
|
||||
|
||||
VDC_ADDR_REG := $D600 ; VDC address
|
||||
VDC_DATA_REG := $D601 ; VDC data
|
||||
|
||||
VDC_DSP_HI = 12 ; registers used
|
||||
VDC_DSP_LO = 13
|
||||
VDC_DATA_HI = 18
|
||||
VDC_DATA_LO = 19
|
||||
VDC_VSCROLL = 24
|
||||
VDC_HSCROLL = 25
|
||||
VDC_COLORS = 26
|
||||
VDC_CSET = 28
|
||||
VDC_COUNT = 30
|
||||
VDC_DATA = 31
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Header. Includes jump table and constants.
|
||||
|
||||
.segment "JUMPTABLE"
|
||||
|
||||
; First part of the header is a structure that has a magic signature,
|
||||
; and defines the capabilities of the driver.
|
||||
|
||||
.byte $74, $67, $69 ; "tgi"
|
||||
.byte TGI_API_VERSION ; TGI API version number
|
||||
xres: .word 320 ; X resolution
|
||||
yres: .word 200 ; Y resolution
|
||||
.byte 2 ; Number of drawing colors
|
||||
pages: .byte 1 ; Number of screens available
|
||||
.byte 8 ; System font X size
|
||||
.byte 8 ; System font Y size
|
||||
aspect: .word $00D4 ; Aspect ratio (based on 4/3 display)
|
||||
.byte 0 ; TGI driver flags
|
||||
|
||||
; Next comes the jump table. With the exception of IRQ, all entries must be
|
||||
; valid, and may point to an RTS for test versions (function not implemented).
|
||||
|
||||
.addr INSTALL
|
||||
.addr UNINSTALL
|
||||
.addr INIT
|
||||
.addr DONE
|
||||
.addr GETERROR
|
||||
.addr CONTROL
|
||||
.addr CLEAR
|
||||
.addr SETVIEWPAGE
|
||||
.addr SETDRAWPAGE
|
||||
.addr SETCOLOR
|
||||
.addr SETPALETTE
|
||||
.addr GETPALETTE
|
||||
.addr GETDEFPALETTE
|
||||
.addr SETPIXEL
|
||||
.addr GETPIXEL
|
||||
.addr LINE
|
||||
.addr BAR
|
||||
.addr TEXTSTYLE
|
||||
.addr OUTTEXT
|
||||
.addr 0 ; IRQ entry is unused
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Data.
|
||||
|
||||
; Variables mapped to the zero-page segment variables. Some of these are
|
||||
; used for passing parameters to the driver.
|
||||
|
||||
X1 = ptr1
|
||||
Y1 = ptr2
|
||||
X2 = ptr3
|
||||
Y2 = ptr4
|
||||
|
||||
; Absolute variables used in the code
|
||||
|
||||
.bss
|
||||
|
||||
SCRBASE: .res 1 ; High byte of screen base (64k VDC only)
|
||||
|
||||
ERROR: .res 1 ; Error code
|
||||
PALETTE: .res 2 ; The current palette
|
||||
|
||||
BITMASK: .res 1 ; $00 = clear, $01 = set pixels
|
||||
|
||||
OLDCOLOR: .res 1 ; colors before entering gfx mode
|
||||
|
||||
; Text output stuff
|
||||
TEXTMAGX: .res 1
|
||||
TEXTMAGY: .res 1
|
||||
TEXTDIR: .res 1
|
||||
|
||||
; Constants and tables
|
||||
|
||||
.rodata
|
||||
|
||||
DEFPALETTE: .byte $00, $0f ; White on black
|
||||
PALETTESIZE = * - DEFPALETTE
|
||||
|
||||
; color translation table (indexed by VIC color)
|
||||
COLTRANS: .byte $00, $0f, $08, $06, $0a, $04, $02, $0c
|
||||
.byte $0d, $0b, $09, $01, $0e, $05, $03, $07
|
||||
; colors BROWN and GRAY3 are wrong
|
||||
|
||||
.code
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; INSTALL routine. Is called after the driver is loaded into memory. May
|
||||
; initialize anything that has to be done just once. Is probably empty
|
||||
; most of the time.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
INSTALL:
|
||||
lda version ; if GEOS 1.0...
|
||||
and #$f0
|
||||
cmp #$10
|
||||
beq @L40
|
||||
lda c128Flag ; at least GEOS 2.0, but we're on C128?
|
||||
bpl @L40
|
||||
lda graphMode ; GEOS 2.0, C128, but is 80 column screen enabled?
|
||||
bmi @L80
|
||||
@L40: rts ; leave default values for 40 column screen
|
||||
|
||||
; check for VDC version and update register $19 value
|
||||
|
||||
@L80:
|
||||
; double the x resolution and halve the aspect ratio
|
||||
|
||||
asl xres
|
||||
rol xres+1
|
||||
|
||||
lsr aspect+1
|
||||
ror aspect
|
||||
|
||||
; update number of available screens
|
||||
|
||||
ldx #VDC_CSET ; determine size of RAM...
|
||||
jsr VDCReadReg
|
||||
sta tmp1
|
||||
ora #%00010000
|
||||
jsr VDCWriteReg ; turn on 64k
|
||||
|
||||
jsr settestadr1 ; save original value of test byte
|
||||
jsr VDCReadByte
|
||||
sta tmp2
|
||||
|
||||
lda #$55 ; write $55 here
|
||||
ldy #ptr1
|
||||
jsr test64k ; read it here and there
|
||||
lda #$aa ; write $aa here
|
||||
ldy #ptr2
|
||||
jsr test64k ; read it here and there
|
||||
|
||||
jsr settestadr1
|
||||
lda tmp2
|
||||
jsr VDCWriteByte ; restore original value of test byte
|
||||
|
||||
lda ptr1 ; do bytes match?
|
||||
cmp ptr1+1
|
||||
bne @have64k
|
||||
lda ptr2
|
||||
cmp ptr2+1
|
||||
bne @have64k
|
||||
|
||||
ldx #VDC_CSET
|
||||
lda tmp1
|
||||
jsr VDCWriteReg ; restore 16/64k flag
|
||||
jmp @endok ; and leave default values for 16k
|
||||
|
||||
@have64k:
|
||||
lda #4
|
||||
sta pages
|
||||
@endok:
|
||||
lda #0
|
||||
sta SCRBASE ; draw page 0 as default
|
||||
rts
|
||||
|
||||
test64k:
|
||||
sta tmp1
|
||||
sty ptr3
|
||||
lda #0
|
||||
sta ptr3+1
|
||||
jsr settestadr1
|
||||
lda tmp1
|
||||
jsr VDCWriteByte ; write $55
|
||||
jsr settestadr1
|
||||
jsr VDCReadByte ; read here
|
||||
pha
|
||||
jsr settestadr2
|
||||
jsr VDCReadByte ; and there
|
||||
ldy #1
|
||||
sta (ptr3),y
|
||||
pla
|
||||
dey
|
||||
sta (ptr3),y
|
||||
rts
|
||||
|
||||
settestadr1:
|
||||
ldy #$02 ; test page 2 (here)
|
||||
.byte $2c
|
||||
settestadr2:
|
||||
ldy #$42 ; or page 64+2 (there)
|
||||
lda #0
|
||||
jmp VDCSetSourceAddr
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; UNINSTALL routine. Is called before the driver is removed from memory. May
|
||||
; clean up anything done by INSTALL but is probably empty most of the time.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
UNINSTALL:
|
||||
rts
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; INIT: Changes an already installed device from text mode to graphics
|
||||
; mode.
|
||||
; Note that INIT/DONE may be called multiple times while the driver
|
||||
; is loaded, while INSTALL is only called once, so any code that is needed
|
||||
; to initializes variables and so on must go here. Setting palette and
|
||||
; clearing the screen is not needed because this is called by the graphics
|
||||
; kernel later.
|
||||
; The graphics kernel will never call INIT when a graphics mode is already
|
||||
; active, so there is no need to protect against that.
|
||||
;
|
||||
; Must set an error code: YES
|
||||
;
|
||||
|
||||
INIT:
|
||||
ldx #$01
|
||||
stx BITMASK ; solid black as pattern
|
||||
lda #1
|
||||
jsr SetPattern
|
||||
lda #ST_WR_FORE ; write only on foreground
|
||||
sta dispBufferOn
|
||||
|
||||
lda graphMode
|
||||
bmi @L80
|
||||
|
||||
; Remember current color value (40 columns)
|
||||
lda screencolors
|
||||
sta OLDCOLOR
|
||||
jmp @L99
|
||||
|
||||
; Remember current color value (80 columns)
|
||||
@L80: lda scr80colors
|
||||
sta OLDCOLOR
|
||||
@L99: lda #0
|
||||
jsr SETVIEWPAGE ; switch into viewpage 0
|
||||
|
||||
; Done, reset the error code
|
||||
|
||||
lda #TGI_ERR_OK
|
||||
sta ERROR
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; DONE: Will be called to switch the graphics device back into text mode.
|
||||
; The graphics kernel will never call DONE when no graphics mode is active,
|
||||
; so there is no need to protect against that.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
DONE:
|
||||
lda #0
|
||||
jsr SETVIEWPAGE ; switch into viewpage 0
|
||||
|
||||
lda graphMode
|
||||
bmi @L80
|
||||
|
||||
lda OLDCOLOR
|
||||
sta screencolors ; restore color for 40 columns
|
||||
ldx #0
|
||||
@L1: sta COLOR_MATRIX,x
|
||||
sta COLOR_MATRIX+$0100,x
|
||||
sta COLOR_MATRIX+$0200,x
|
||||
sta COLOR_MATRIX+1000-256,x
|
||||
inx
|
||||
bne @L1
|
||||
rts
|
||||
|
||||
@L80: lda OLDCOLOR ; restore color for 80 columns
|
||||
ldx #VDC_COLORS
|
||||
jmp VDCWriteReg
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; GETERROR: Return the error code in A and clear it.
|
||||
|
||||
GETERROR:
|
||||
ldx #TGI_ERR_OK
|
||||
lda ERROR
|
||||
stx ERROR
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; CONTROL: Platform/driver specific entry point.
|
||||
;
|
||||
; Must set an error code: YES
|
||||
;
|
||||
|
||||
CONTROL:
|
||||
lda #TGI_ERR_INV_FUNC
|
||||
sta ERROR
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; CLEAR: Clears the screen.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
CLEAR:
|
||||
lda curPattern
|
||||
pha
|
||||
lda #0
|
||||
jsr SetPattern
|
||||
ldx #0
|
||||
stx r3L
|
||||
stx r3H
|
||||
stx r2L
|
||||
lda #199
|
||||
sta r2H
|
||||
lda graphMode
|
||||
bpl @L40
|
||||
lda #>639 ; 80 columns
|
||||
ldx #<639
|
||||
bne @L99
|
||||
@L40: lda #>319 ; 40 columns
|
||||
ldx #<319
|
||||
@L99: sta r4H
|
||||
stx r4L
|
||||
jsr Rectangle
|
||||
pla
|
||||
sta curPattern
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
|
||||
; The page number is already checked to be valid by the graphics kernel.
|
||||
;
|
||||
; Must set an error code: NO (will only be called if page ok)
|
||||
;
|
||||
|
||||
SETVIEWPAGE:
|
||||
ldx graphMode
|
||||
bmi @L80
|
||||
rts
|
||||
@L80: clc
|
||||
ror
|
||||
ror
|
||||
ror
|
||||
ldx #VDC_DSP_HI
|
||||
jmp VDCWriteReg
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
|
||||
; The page number is already checked to be valid by the graphics kernel.
|
||||
;
|
||||
; Must set an error code: NO (will only be called if page ok)
|
||||
;
|
||||
|
||||
SETDRAWPAGE:
|
||||
ldx graphMode
|
||||
bmi @L80
|
||||
rts
|
||||
@L80: clc
|
||||
ror
|
||||
ror
|
||||
ror
|
||||
sta SCRBASE
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; SETCOLOR: Set the drawing color (in A). The new color is already checked
|
||||
; to be in a valid range (0..maxcolor-1).
|
||||
;
|
||||
; Must set an error code: NO (will only be called if color ok)
|
||||
;
|
||||
|
||||
SETCOLOR:
|
||||
tax
|
||||
beq @L1
|
||||
lda #1
|
||||
@L1: sta BITMASK
|
||||
jmp SetPattern ; need to have either 0 or 1
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; SETPALETTE: Set the palette (not available with all drivers/hardware).
|
||||
; A pointer to the palette is passed in ptr1. Must set an error if palettes
|
||||
; are not supported
|
||||
;
|
||||
; Must set an error code: YES
|
||||
;
|
||||
|
||||
SETPALETTE:
|
||||
jsr GETERROR ; clear error (if any)
|
||||
|
||||
ldy #PALETTESIZE - 1
|
||||
@L1: lda (ptr1),y ; Copy the palette
|
||||
and #$0F ; Make a valid color
|
||||
sta PALETTE,y
|
||||
dey
|
||||
bpl @L1
|
||||
|
||||
; Put colors from palette into screen
|
||||
|
||||
lda graphMode
|
||||
bmi @L80
|
||||
|
||||
lda PALETTE+1 ; foreground
|
||||
asl a
|
||||
asl a
|
||||
asl a
|
||||
asl a
|
||||
ora PALETTE ; background
|
||||
ldx #0
|
||||
@L2: sta COLOR_MATRIX,x
|
||||
sta COLOR_MATRIX+$0100,x
|
||||
sta COLOR_MATRIX+$0200,x
|
||||
sta COLOR_MATRIX+1000-256,x
|
||||
inx
|
||||
bne @L2
|
||||
rts
|
||||
|
||||
@L80: ldy PALETTE+1 ; Foreground color
|
||||
lda COLTRANS,y
|
||||
asl a
|
||||
asl a
|
||||
asl a
|
||||
asl a
|
||||
ldy PALETTE ; Background color
|
||||
ora COLTRANS,y
|
||||
|
||||
ldx #VDC_COLORS
|
||||
jmp VDCWriteReg
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
|
||||
; set the palette should return the default palette here, so there's no
|
||||
; way for this function to fail.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
GETPALETTE:
|
||||
lda #<PALETTE
|
||||
ldx #>PALETTE
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; GETDEFPALETTE: Return the default palette for the driver in A/X. All
|
||||
; drivers should return something reasonable here, even drivers that don't
|
||||
; support palettes, otherwise the caller has no way to determine the colors
|
||||
; of the (not changeable) palette.
|
||||
;
|
||||
; Must set an error code: NO (all drivers must have a default palette)
|
||||
;
|
||||
|
||||
GETDEFPALETTE:
|
||||
lda #<DEFPALETTE
|
||||
ldx #>DEFPALETTE
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
|
||||
; color. The coordinates passed to this function are never outside the
|
||||
; visible screen area, so there is no need for clipping inside this function.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
SETPIXEL:
|
||||
lda X1
|
||||
ldx X1+1
|
||||
ldy Y1
|
||||
sta r3L
|
||||
stx r3H
|
||||
sty r11L
|
||||
sec
|
||||
lda BITMASK ; set or clear C flag
|
||||
bne @L1
|
||||
clc
|
||||
@L1: lda #0
|
||||
jmp DrawPoint
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; GETPIXEL: Read the color value of a pixel and return it in A/X. The
|
||||
; coordinates passed to this function are never outside the visible screen
|
||||
; area, so there is no need for clipping inside this function.
|
||||
|
||||
|
||||
GETPIXEL:
|
||||
lda X1
|
||||
ldx X1+1
|
||||
ldy Y1
|
||||
sta r3L
|
||||
stx r3H
|
||||
sty r11L
|
||||
jsr TestPoint
|
||||
ldx #0
|
||||
bcc @L1
|
||||
inx
|
||||
@L1: txa
|
||||
ldx #0
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
|
||||
; X2/Y2 = ptr3/ptr4 using the current drawing color.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
LINE:
|
||||
lda X1
|
||||
ldx X1+1
|
||||
ldy Y1
|
||||
sta r3L
|
||||
stx r3H
|
||||
sty r11L
|
||||
lda X2
|
||||
ldx X2+1
|
||||
ldy Y2
|
||||
sta r4L
|
||||
stx r4H
|
||||
sty r11H
|
||||
sec
|
||||
lda BITMASK ; set or clear C flag
|
||||
bne @L1
|
||||
clc
|
||||
@L1: lda #0
|
||||
jmp DrawLine
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
|
||||
; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
|
||||
; Contrary to most other functions, the graphics kernel will sort and clip
|
||||
; the coordinates before calling the driver, so on entry the following
|
||||
; conditions are valid:
|
||||
; X1 <= X2
|
||||
; Y1 <= Y2
|
||||
; (X1 >= 0) && (X1 < XRES)
|
||||
; (X2 >= 0) && (X2 < XRES)
|
||||
; (Y1 >= 0) && (Y1 < YRES)
|
||||
; (Y2 >= 0) && (Y2 < YRES)
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
BAR:
|
||||
lda X1
|
||||
ldx X1+1
|
||||
ldy Y1
|
||||
sta r3L
|
||||
stx r3H
|
||||
sty r2L
|
||||
lda X2
|
||||
ldx X2+1
|
||||
ldy Y2
|
||||
sta r4L
|
||||
stx r4H
|
||||
sty r2H
|
||||
jmp Rectangle
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
|
||||
; direction is passend in X/Y, the text direction is passed in A.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
TEXTSTYLE:
|
||||
stx TEXTMAGX
|
||||
sty TEXTMAGY
|
||||
sta TEXTDIR
|
||||
rts
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
|
||||
; current text style. The text to output is given as a zero terminated
|
||||
; string with address in ptr3.
|
||||
;
|
||||
; Must set an error code: NO
|
||||
;
|
||||
|
||||
OUTTEXT:
|
||||
lda TEXTDIR
|
||||
; cmp #TGI_TEXT_HORIZONTAL ; this is equal 0
|
||||
bne @vertical
|
||||
|
||||
lda X1 ; horizontal text output
|
||||
ldx X1+1
|
||||
ldy Y1
|
||||
sta r11L
|
||||
stx r11H
|
||||
sty r1H
|
||||
lda ptr3
|
||||
ldx ptr3+1
|
||||
sta r0L
|
||||
stx r0H
|
||||
jmp PutString
|
||||
|
||||
@vertical:
|
||||
lda X1 ; vertical text output
|
||||
ldx X1+1
|
||||
ldy Y1
|
||||
sta r11L
|
||||
stx r11H
|
||||
sty r1H
|
||||
ldy #0
|
||||
lda (ptr3),y
|
||||
beq @end
|
||||
jsr PutChar
|
||||
inc ptr3
|
||||
bne @L1
|
||||
inc ptr3+1
|
||||
@L1: lda Y1
|
||||
clc
|
||||
adc #8
|
||||
sta Y1
|
||||
bne @vertical
|
||||
@end: rts
|
||||
|
||||
;-------------
|
||||
; VDC helpers
|
||||
|
||||
VDCSetSourceAddr:
|
||||
pha
|
||||
tya
|
||||
ldx #VDC_DATA_HI
|
||||
jsr VDCWriteReg
|
||||
pla
|
||||
ldx #VDC_DATA_LO
|
||||
bne VDCWriteReg
|
||||
|
||||
VDCReadByte:
|
||||
ldx #VDC_DATA
|
||||
VDCReadReg:
|
||||
stx VDC_ADDR_REG
|
||||
@L0: bit VDC_ADDR_REG
|
||||
bpl @L0
|
||||
lda VDC_DATA_REG
|
||||
rts
|
||||
|
||||
VDCWriteByte:
|
||||
ldx #VDC_DATA
|
||||
VDCWriteReg:
|
||||
stx VDC_ADDR_REG
|
||||
@L0: bit VDC_ADDR_REG
|
||||
bpl @L0
|
||||
sta VDC_DATA_REG
|
||||
rts
|
||||
|
||||
426
libsrc/geos-cbm/devel/geos-vdc.s
Normal file
426
libsrc/geos-cbm/devel/geos-vdc.s
Normal file
@@ -0,0 +1,426 @@
|
||||
;
|
||||
; Extended memory driver for the VDC RAM available on all C128 machines
|
||||
; version for GEOS enters safe I/O config on C64 (transparent on C128)
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
|
||||
; 06,20,25.12.2002
|
||||
|
||||
.include "zeropage.inc"
|
||||
|
||||
.include "em-kernel.inc"
|
||||
.include "em-error.inc"
|
||||
|
||||
|
||||
.macpack generic
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Header. Includes jump table
|
||||
|
||||
.segment "JUMPTABLE"
|
||||
|
||||
; Driver signature
|
||||
|
||||
.byte $65, $6d, $64 ; "emd"
|
||||
.byte EMD_API_VERSION ; EM API version number
|
||||
|
||||
; Jump table.
|
||||
|
||||
.word INSTALL
|
||||
.word UNINSTALL
|
||||
.word PAGECOUNT
|
||||
.word MAP
|
||||
.word USE
|
||||
.word COMMIT
|
||||
.word COPYFROM
|
||||
.word COPYTO
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Constants
|
||||
|
||||
VDC_ADDR_REG = $D600 ; VDC address
|
||||
VDC_DATA_REG = $D601 ; VDC data
|
||||
|
||||
VDC_DATA_HI = 18 ; used registers
|
||||
VDC_DATA_LO = 19
|
||||
VDC_CSET = 28
|
||||
VDC_DATA = 31
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Data.
|
||||
|
||||
.data
|
||||
|
||||
pagecount: .word 64 ; $0000-$3fff as 16k default
|
||||
curpage: .word $ffff ; currently mapped-in page (invalid)
|
||||
|
||||
.bss
|
||||
|
||||
window: .res 256 ; memory window
|
||||
|
||||
.code
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; INSTALL routine. Is called after the driver is loaded into memory. If
|
||||
; possible, check if the hardware is present and determine the amount of
|
||||
; memory available.
|
||||
; Must return an EM_ERR_xx code in a/x.
|
||||
;
|
||||
|
||||
INSTALL:
|
||||
; do test for VDC presence here???
|
||||
|
||||
php
|
||||
sei
|
||||
lda $01
|
||||
pha
|
||||
lda #$35
|
||||
sta $01
|
||||
|
||||
ldx #VDC_CSET ; determine size of RAM...
|
||||
jsr vdcgetreg
|
||||
sta tmp1
|
||||
ora #%00010000
|
||||
jsr vdcputreg ; turn on 64k
|
||||
|
||||
jsr settestadr1 ; save original value of test byte
|
||||
jsr vdcgetbyte
|
||||
sta tmp2
|
||||
|
||||
lda #$55 ; write $55 here
|
||||
ldy #ptr1
|
||||
jsr test64k ; read it here and there
|
||||
lda #$aa ; write $aa here
|
||||
ldy #ptr2
|
||||
jsr test64k ; read it here and there
|
||||
|
||||
jsr settestadr1
|
||||
lda tmp2
|
||||
jsr vdcputbyte ; restore original value of test byte
|
||||
|
||||
lda ptr1 ; do bytes match?
|
||||
cmp ptr1+1
|
||||
bne @have64k
|
||||
lda ptr2
|
||||
cmp ptr2+1
|
||||
bne @have64k
|
||||
|
||||
ldx #VDC_CSET
|
||||
lda tmp1
|
||||
jsr vdcputreg ; restore 16/64k flag
|
||||
jmp @endok ; and leave default values for 16k
|
||||
|
||||
@have64k:
|
||||
lda #<256
|
||||
ldx #>256
|
||||
sta pagecount
|
||||
stx pagecount+1
|
||||
@endok:
|
||||
pla
|
||||
sta $01
|
||||
plp
|
||||
lda #<EM_ERR_OK
|
||||
ldx #>EM_ERR_OK
|
||||
rts
|
||||
|
||||
test64k:
|
||||
sta tmp1
|
||||
sty ptr3
|
||||
lda #0
|
||||
sta ptr3+1
|
||||
jsr settestadr1
|
||||
lda tmp1
|
||||
jsr vdcputbyte ; write $55
|
||||
jsr settestadr1
|
||||
jsr vdcgetbyte ; read here
|
||||
pha
|
||||
jsr settestadr2
|
||||
jsr vdcgetbyte ; and there
|
||||
ldy #1
|
||||
sta (ptr3),y
|
||||
pla
|
||||
dey
|
||||
sta (ptr3),y
|
||||
rts
|
||||
|
||||
settestadr1:
|
||||
ldy #$02 ; test page 2 (here)
|
||||
.byte $2c
|
||||
settestadr2:
|
||||
ldy #$42 ; or page 64+2 (there)
|
||||
lda #0
|
||||
jmp vdcsetsrcaddr
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; UNINSTALL routine. Is called before the driver is removed from memory.
|
||||
; Can do cleanup or whatever. Must not return anything.
|
||||
;
|
||||
|
||||
UNINSTALL:
|
||||
;on C128 restore font and clear the screen?
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; PAGECOUNT: Return the total number of available pages in a/x.
|
||||
;
|
||||
|
||||
PAGECOUNT:
|
||||
lda pagecount
|
||||
ldx pagecount+1
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; MAP: Map the page in a/x into memory and return a pointer to the page in
|
||||
; a/x. The contents of the currently mapped page (if any) may be discarded
|
||||
; by the driver.
|
||||
;
|
||||
|
||||
MAP: sta curpage
|
||||
stx curpage+1
|
||||
sta ptr1+1
|
||||
ldy #0
|
||||
sty ptr1
|
||||
|
||||
lda #<window
|
||||
sta ptr2
|
||||
lda #>window
|
||||
sta ptr2+1
|
||||
|
||||
jsr transferin
|
||||
|
||||
lda #<window
|
||||
ldx #>window
|
||||
rts
|
||||
|
||||
; copy a single page from (ptr1):VDCRAM to (ptr2):RAM
|
||||
|
||||
transferin:
|
||||
php
|
||||
sei
|
||||
lda $01
|
||||
pha
|
||||
lda #$35
|
||||
sta $01
|
||||
lda ptr1
|
||||
ldy ptr1+1
|
||||
jsr vdcsetsrcaddr ; set source address in VDC
|
||||
ldy #0
|
||||
ldx #VDC_DATA
|
||||
stx VDC_ADDR_REG
|
||||
@L0: bit VDC_ADDR_REG
|
||||
bpl @L0
|
||||
lda VDC_DATA_REG ; get 2 bytes at a time to speed-up
|
||||
sta (ptr2),y ; (in fact up to 8 bytes could be fetched with special VDC config)
|
||||
iny
|
||||
lda VDC_DATA_REG
|
||||
sta (ptr2),y
|
||||
iny
|
||||
bne @L0
|
||||
pla
|
||||
sta $01
|
||||
plp
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; USE: Tell the driver that the window is now associated with a given page.
|
||||
|
||||
USE: sta curpage
|
||||
stx curpage+1 ; Remember the page
|
||||
lda #<window
|
||||
ldx #>window ; Return the window
|
||||
done: rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; COMMIT: Commit changes in the memory window to extended storage.
|
||||
|
||||
COMMIT:
|
||||
lda curpage ; jump if no page mapped
|
||||
ldx curpage+1
|
||||
bmi done
|
||||
sta ptr1+1
|
||||
ldy #0
|
||||
sty ptr1
|
||||
|
||||
lda #<window
|
||||
sta ptr2
|
||||
lda #>window
|
||||
sta ptr2+1
|
||||
|
||||
; fall through to transferout
|
||||
|
||||
; copy a single page from (ptr2):RAM to (ptr1):VDCRAM
|
||||
|
||||
transferout:
|
||||
php
|
||||
sei
|
||||
lda $01
|
||||
pha
|
||||
lda #$35
|
||||
sta $01
|
||||
lda ptr1
|
||||
ldy ptr1+1
|
||||
jsr vdcsetsrcaddr ; set source address in VDC
|
||||
ldy #0
|
||||
ldx #VDC_DATA
|
||||
stx VDC_ADDR_REG
|
||||
@L0: bit VDC_ADDR_REG
|
||||
bpl @L0
|
||||
lda (ptr2),y ; speedup does not work for writing
|
||||
sta VDC_DATA_REG
|
||||
iny
|
||||
bne @L0
|
||||
pla
|
||||
sta $01
|
||||
plp
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; COPYFROM: Copy from extended into linear memory. A pointer to a structure
|
||||
; describing the request is passed in a/x.
|
||||
; The function must not return anything.
|
||||
;
|
||||
|
||||
COPYFROM:
|
||||
jsr setup
|
||||
beq @L2 ; Skip if no full pages
|
||||
|
||||
; Copy full pages
|
||||
|
||||
@L1: jsr transferin
|
||||
inc ptr1+1
|
||||
inc ptr2+1
|
||||
dec tmp1
|
||||
bne @L1
|
||||
|
||||
; Copy the remainder of the page
|
||||
|
||||
@L2: ldy #EM_COPY::COUNT
|
||||
lda (ptr3),y ; Get bytes in last page
|
||||
beq @L4
|
||||
sta tmp1
|
||||
|
||||
; Transfer the bytes in the last page
|
||||
php
|
||||
sei
|
||||
lda $01
|
||||
pha
|
||||
lda #$35
|
||||
sta $01
|
||||
ldy #0
|
||||
@L3: jsr vdcgetbyte
|
||||
sta (ptr2),y
|
||||
iny
|
||||
dec tmp1
|
||||
lda tmp1
|
||||
bne @L3
|
||||
pla
|
||||
sta $01
|
||||
plp
|
||||
@L4: rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; COPYTO: Copy from linear into extended memory. A pointer to a structure
|
||||
; describing the request is passed in a/x.
|
||||
; The function must not return anything.
|
||||
;
|
||||
|
||||
COPYTO:
|
||||
jsr setup
|
||||
beq @L2 ; Skip if no full pages
|
||||
|
||||
; Copy full pages
|
||||
|
||||
@L1: jsr transferout
|
||||
inc ptr1+1
|
||||
inc ptr2+1
|
||||
dec tmp1
|
||||
bne @L1
|
||||
|
||||
; Copy the remainder of the page
|
||||
|
||||
@L2: ldy #EM_COPY::COUNT
|
||||
lda (ptr3),y ; Get bytes in last page
|
||||
beq @L4
|
||||
sta tmp1
|
||||
|
||||
; Transfer the bytes in the last page
|
||||
php
|
||||
sei
|
||||
lda $01
|
||||
pha
|
||||
lda #$35
|
||||
sta $01
|
||||
ldy #0
|
||||
@L3: lda (ptr2),y
|
||||
jsr vdcputbyte
|
||||
iny
|
||||
dec tmp1
|
||||
lda tmp1
|
||||
bne @L3
|
||||
pla
|
||||
sta $01
|
||||
plp
|
||||
@L4: rts
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
; Helper functions to handle VDC ram
|
||||
;
|
||||
|
||||
vdcsetsrcaddr:
|
||||
ldx #VDC_DATA_LO
|
||||
stx VDC_ADDR_REG
|
||||
@L0: bit VDC_ADDR_REG
|
||||
bpl @L0
|
||||
sta VDC_DATA_REG
|
||||
dex
|
||||
tya
|
||||
stx VDC_ADDR_REG
|
||||
sta VDC_DATA_REG
|
||||
rts
|
||||
|
||||
vdcgetbyte:
|
||||
ldx #VDC_DATA
|
||||
vdcgetreg:
|
||||
stx VDC_ADDR_REG
|
||||
@L0: bit VDC_ADDR_REG
|
||||
bpl @L0
|
||||
lda VDC_DATA_REG
|
||||
rts
|
||||
|
||||
vdcputbyte:
|
||||
ldx #VDC_DATA
|
||||
vdcputreg:
|
||||
stx VDC_ADDR_REG
|
||||
@L0: bit VDC_ADDR_REG
|
||||
bpl @L0
|
||||
sta VDC_DATA_REG
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Helper function for COPYFROM and COPYTO: Store the pointer to the request
|
||||
; structure and prepare data for the copy
|
||||
;
|
||||
|
||||
setup:
|
||||
sta ptr3
|
||||
stx ptr3+1 ; Save the passed em_copy pointer
|
||||
|
||||
ldy #EM_COPY::OFFS
|
||||
lda (ptr3),y
|
||||
sta ptr1
|
||||
ldy #EM_COPY::PAGE
|
||||
lda (ptr3),y
|
||||
sta ptr1+1 ; From
|
||||
|
||||
ldy #EM_COPY::BUF
|
||||
lda (ptr3),y
|
||||
sta ptr2
|
||||
iny
|
||||
lda (ptr3),y
|
||||
sta ptr2+1 ; To
|
||||
|
||||
ldy #EM_COPY::COUNT+1
|
||||
lda (ptr3),y ; Get number of pages
|
||||
sta tmp1
|
||||
rts
|
||||
|
||||
14
libsrc/geos-cbm/devel/joy_stddrv.s
Normal file
14
libsrc/geos-cbm/devel/joy_stddrv.s
Normal file
@@ -0,0 +1,14 @@
|
||||
;
|
||||
; Name of the standard joystick driver
|
||||
;
|
||||
; Ullrich von Bassewitz, 2002-12-21
|
||||
;
|
||||
; const char joy_stddrv[];
|
||||
;
|
||||
|
||||
.export _joy_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_joy_stddrv: .asciiz "geos-stdjoy.joy"
|
||||
|
||||
79
libsrc/geos-cbm/devel/mainargs.s
Normal file
79
libsrc/geos-cbm/devel/mainargs.s
Normal file
@@ -0,0 +1,79 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 2003-03-07
|
||||
; Maciej Witkowiak, 2003-05-02
|
||||
;
|
||||
; Setup arguments for main
|
||||
;
|
||||
; There is always either 1 or 3 arguments:
|
||||
; <program name>,0
|
||||
; or
|
||||
; <program name>, <data file name>, <data disk name>, 0
|
||||
; the 2nd case is when using DeskTop user drags an icon of a file and drops it
|
||||
; on icon of your application
|
||||
;
|
||||
|
||||
.constructor initmainargs, 24
|
||||
.import __argc, __argv
|
||||
|
||||
.include "../inc/const.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
;---------------------------------------------------------------------------
|
||||
; Setup arguments for main
|
||||
|
||||
.segment "INIT"
|
||||
|
||||
.proc initmainargs
|
||||
|
||||
; Setup a pointer to our argv vector
|
||||
|
||||
lda #<argv
|
||||
sta __argv
|
||||
lda #>argv
|
||||
sta __argv+1
|
||||
|
||||
; Copy program name
|
||||
|
||||
ldy #0
|
||||
@fn_loop:
|
||||
lda dirEntryBuf+OFF_FNAME,y
|
||||
cmp #$a0
|
||||
beq @fn_end
|
||||
sta argv0,y
|
||||
iny
|
||||
cpy #16+1
|
||||
bne @fn_loop
|
||||
@fn_end:
|
||||
lda #0
|
||||
sta argv0,y
|
||||
sta __argc+1
|
||||
|
||||
; Check if there are any more arguments
|
||||
|
||||
lda dataFileName
|
||||
bne @threeargs
|
||||
ldx #0 ; no dataFileName - NULL the 2nd argument
|
||||
stx argv+2
|
||||
stx argv+3
|
||||
inx ; there is only one argument
|
||||
bne @setargc
|
||||
@threeargs:
|
||||
ldx #3 ; there are three arguments
|
||||
@setargc:
|
||||
stx __argc
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
;---------------------------------------------------------------------------
|
||||
; Data
|
||||
|
||||
.data
|
||||
|
||||
argv: .word argv0 ; Pointer to program name
|
||||
.word dataFileName ; dataFileName or NULL if last one
|
||||
.word dataDiskName ; dataDiskName
|
||||
.word $0000 ; last one must be NULL
|
||||
|
||||
.bss
|
||||
argv0: .res 17 ; Program name
|
||||
68
libsrc/geos-cbm/devel/mcbdefault.s
Normal file
68
libsrc/geos-cbm/devel/mcbdefault.s
Normal file
@@ -0,0 +1,68 @@
|
||||
;
|
||||
; Mouse callbacks for GEOS.
|
||||
;
|
||||
; GEOS has a built-in mouse architecture. Half of this file does nothing
|
||||
; -- it exists merely to allow portable programs to link and run.
|
||||
;
|
||||
; 2.7.2001, Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2004-03-20, Ullrich von Bassewitz
|
||||
; 2004-09-24, Greg King
|
||||
;
|
||||
|
||||
; .constructor init_pointer
|
||||
.export _mouse_def_callbacks
|
||||
|
||||
; .include "mouse-kernel.inc"
|
||||
; .include "../inc/const.inc"
|
||||
; .include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
; .macpack generic
|
||||
|
||||
; The functions below must be interrupt-safe,
|
||||
; because they might be called from an interrupt-handler.
|
||||
|
||||
.code
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Hide the mouse pointer. Always called with interrupts disabled.
|
||||
|
||||
hide := MouseOff
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Show the mouse pointer. Always called with interrupts disabled.
|
||||
|
||||
show := MouseUp
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Move the mouse pointer X position to the value in .XA. Always called with
|
||||
; interrupts disabled.
|
||||
|
||||
.proc movex
|
||||
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Move the mouse pointer Y position to the value in .XA. Always called with
|
||||
; interrupts disabled.
|
||||
|
||||
.proc movey
|
||||
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Callback structure
|
||||
|
||||
.rodata
|
||||
|
||||
_mouse_def_callbacks:
|
||||
.addr hide
|
||||
.addr show
|
||||
.addr movex
|
||||
.addr movey
|
||||
|
||||
|
||||
11
libsrc/geos-cbm/devel/mouse_stddrv.s
Normal file
11
libsrc/geos-cbm/devel/mouse_stddrv.s
Normal file
@@ -0,0 +1,11 @@
|
||||
;
|
||||
; Name of the standard mouse driver
|
||||
;
|
||||
; 2010-01-25, Greg King
|
||||
;
|
||||
; const char mouse_stddrv[];
|
||||
;
|
||||
.export _mouse_stddrv
|
||||
|
||||
.rodata
|
||||
_mouse_stddrv: .asciiz "geos-stdmou.mou"
|
||||
94
libsrc/geos-cbm/devel/oserrlist.s
Normal file
94
libsrc/geos-cbm/devel/oserrlist.s
Normal file
@@ -0,0 +1,94 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
|
||||
; 25.12.2002
|
||||
;
|
||||
; Defines the platform specific error list.
|
||||
;
|
||||
; The table is built as a list of entries
|
||||
;
|
||||
; .byte entrylen
|
||||
; .byte errorcode
|
||||
; .asciiz errormsg
|
||||
;
|
||||
; and terminated by an entry with length zero that is returned if the
|
||||
; error code could not be found.
|
||||
;
|
||||
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.export __sys_oserrlist
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; Macros used to generate the list (may get moved to an include file?)
|
||||
|
||||
; Regular entry
|
||||
.macro sys_oserr_entry code, msg
|
||||
.local Start, End
|
||||
Start: .byte End - Start
|
||||
.byte code
|
||||
.asciiz msg
|
||||
End:
|
||||
.endmacro
|
||||
|
||||
; Sentinel entry
|
||||
.macro sys_oserr_sentinel msg
|
||||
.byte 0 ; Length is always zero
|
||||
.byte 0 ; Code is unused
|
||||
.asciiz msg
|
||||
.endmacro
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; The error message table
|
||||
|
||||
.rodata
|
||||
|
||||
__sys_oserrlist:
|
||||
sys_oserr_entry NO_BLOCKS, "No free blocks"
|
||||
sys_oserr_entry INV_TRACK, "Illegal track or sector"
|
||||
sys_oserr_entry INSUFF_SPACE, "Disk full"
|
||||
sys_oserr_entry FULL_DIRECTORY, "Directory full"
|
||||
sys_oserr_entry FILE_NOT_FOUND, "File not found"
|
||||
sys_oserr_entry BAD_BAM, "Inconsistent BAM"
|
||||
sys_oserr_entry UNOPENED_VLIR, "VLIR file not opened"
|
||||
sys_oserr_entry INV_RECORD, "Invalid VLIR record"
|
||||
sys_oserr_entry OUT_OF_RECORDS, "Out of VLIR records"
|
||||
sys_oserr_entry STRUCT_MISMAT, "Structure mismatch"
|
||||
sys_oserr_entry BFR_OVERFLOW, "Buffer overflow"
|
||||
sys_oserr_entry CANCEL_ERR, "Operation cancelled"
|
||||
sys_oserr_entry DEV_NOT_FOUND, "Device not found"
|
||||
sys_oserr_entry INCOMPATIBLE, "Incompatible device"
|
||||
sys_oserr_entry 20, "Read error"
|
||||
sys_oserr_entry 21, "Read error"
|
||||
sys_oserr_entry 22, "Read error"
|
||||
sys_oserr_entry 23, "Read error"
|
||||
sys_oserr_entry 24, "Read error"
|
||||
sys_oserr_entry 25, "Write error"
|
||||
sys_oserr_entry 26, "Write protect on"
|
||||
sys_oserr_entry 27, "Read error"
|
||||
sys_oserr_entry 28, "Write error"
|
||||
sys_oserr_entry 29, "Disk ID mismatch"
|
||||
sys_oserr_entry 30, "Syntax error"
|
||||
sys_oserr_entry 31, "Syntax error"
|
||||
sys_oserr_entry 32, "Syntax error"
|
||||
sys_oserr_entry 33, "Syntax error (invalid file name)"
|
||||
sys_oserr_entry 34, "Syntax error (no file given)"
|
||||
sys_oserr_entry 39, "Syntax error"
|
||||
sys_oserr_entry 50, "Record not present"
|
||||
sys_oserr_entry 51, "Overflow in record"
|
||||
sys_oserr_entry 52, "File too large"
|
||||
sys_oserr_entry 60, "Write file open"
|
||||
sys_oserr_entry 61, "File not open"
|
||||
sys_oserr_entry 62, "File not found"
|
||||
sys_oserr_entry 63, "File exists"
|
||||
sys_oserr_entry 64, "File type mismatch"
|
||||
sys_oserr_entry 65, "No block"
|
||||
sys_oserr_entry 66, "Illegal track or sector"
|
||||
sys_oserr_entry 67, "Illegal system track or sector"
|
||||
sys_oserr_entry 70, "No channel"
|
||||
sys_oserr_entry 71, "Directory error"
|
||||
sys_oserr_entry 72, "Disk full"
|
||||
sys_oserr_entry 73, "DOS version mismatch"
|
||||
sys_oserr_entry 74, "Drive not ready"
|
||||
sys_oserr_sentinel "Unknown error"
|
||||
|
||||
|
||||
86
libsrc/geos-cbm/devel/oserror.s
Normal file
86
libsrc/geos-cbm/devel/oserror.s
Normal file
@@ -0,0 +1,86 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 17.05.2000
|
||||
; GEOS port: Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2.7.2001
|
||||
;
|
||||
; int __fastcall__ _osmaperrno (unsigned char oserror);
|
||||
; /* Map a system specific error into a system independent code */
|
||||
;
|
||||
|
||||
.export __osmaperrno
|
||||
.include "errno.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.code
|
||||
|
||||
__osmaperrno:
|
||||
ldx #ErrTabSize
|
||||
@L1: cmp ErrTab-2,x ; Search for the error code
|
||||
beq @L2 ; Jump if found
|
||||
dex
|
||||
dex
|
||||
bne @L1 ; Next entry
|
||||
|
||||
; Code not found, return EINVAL
|
||||
|
||||
lda #<EINVAL
|
||||
ldx #>EINVAL
|
||||
rts
|
||||
|
||||
; Found the code
|
||||
|
||||
@L2: lda ErrTab-1,x
|
||||
ldx #$00 ; High byte always zero
|
||||
rts
|
||||
|
||||
.rodata
|
||||
|
||||
ErrTab:
|
||||
.byte NO_BLOCKS, EINVAL ; ???
|
||||
.byte INV_TRACK, EINVAL ; invalid track§or pair
|
||||
.byte INSUFF_SPACE, ENOSPC ; out of space
|
||||
.byte FULL_DIRECTORY, ENOSPC ; directory is full
|
||||
.byte FILE_NOT_FOUND, ENOENT ; file not found
|
||||
.byte BAD_BAM, EIO ; bam inconsistent
|
||||
.byte UNOPENED_VLIR, EINVAL ; using VLIR file without opening
|
||||
.byte INV_RECORD, EINVAL ; using >128 VLIR record number
|
||||
.byte OUT_OF_RECORDS, ENOSPC ; cannot insert/add record
|
||||
.byte STRUCT_MISMAT, EINVAL ; ???
|
||||
.byte BFR_OVERFLOW, ENOMEM ; file longer than buffer or end of file
|
||||
.byte CANCEL_ERR, EIO ; ???
|
||||
.byte DEV_NOT_FOUND, ENODEV ; device not found
|
||||
.byte INCOMPATIBLE, EINVAL ; ???
|
||||
|
||||
; .byte 20, ; Read error
|
||||
; .byte 21, ; Read error
|
||||
; .byte 22, ; Read error
|
||||
; .byte 23, ; Read error
|
||||
; .byte 24, ; Read error
|
||||
; .byte 25, ; Write error
|
||||
.byte 26, EACCES ; Write protect on
|
||||
; .byte 27, ; Read error
|
||||
; .byte 28, ; Write error
|
||||
; .byte 29, ; Disk ID mismatch
|
||||
; .byte 30, ; Syntax error
|
||||
; .byte 31, ; Syntax error
|
||||
; .byte 32, ; Syntax error
|
||||
.byte 33, EINVAL ; Syntax error (invalid file name)
|
||||
.byte 34, EINVAL ; Syntax error (no file given)
|
||||
; .byte 39, ; Syntax error
|
||||
; .byte 50, ; Record not present
|
||||
; .byte 51, ; Overflow in record
|
||||
; .byte 52, ; File too large
|
||||
.byte 60, EINVAL ; Write file open
|
||||
.byte 61, EINVAL ; File not open
|
||||
.byte 62, ENOENT ; File not found
|
||||
.byte 63, EEXIST ; File exists
|
||||
.byte 64, EINVAL ; File type mismatch
|
||||
; .byte 65, ; No block
|
||||
; .byte 66, ; Illegal track or sector
|
||||
; .byte 67, ; Illegal system track or sector
|
||||
.byte 70, EBUSY ; No channel
|
||||
; .byte 71, ; Directory error
|
||||
; .byte 72, ; Disk full
|
||||
; .byte 73, ; DOS version mismatch
|
||||
|
||||
ErrTabSize = (* - ErrTab)
|
||||
16
libsrc/geos-cbm/devel/randomize.s
Normal file
16
libsrc/geos-cbm/devel/randomize.s
Normal file
@@ -0,0 +1,16 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 05.11.2002
|
||||
;
|
||||
; void _randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.import _srand
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
__randomize:
|
||||
lda random ; get random value from internal generator
|
||||
ldx random+1
|
||||
jmp _srand ; and use it as seed
|
||||
8
libsrc/geos-cbm/devel/tgi_colors.s
Normal file
8
libsrc/geos-cbm/devel/tgi_colors.s
Normal file
@@ -0,0 +1,8 @@
|
||||
;
|
||||
; Target-specific black & white values, for use by the target-shared TGI kernel
|
||||
;
|
||||
|
||||
.include "tgi-kernel.inc"
|
||||
|
||||
tgi_color_black = $00
|
||||
tgi_color_white = $01
|
||||
13
libsrc/geos-cbm/devel/tgi_stddrv.s
Normal file
13
libsrc/geos-cbm/devel/tgi_stddrv.s
Normal file
@@ -0,0 +1,13 @@
|
||||
;
|
||||
; Name of the standard tgi driver
|
||||
;
|
||||
; Oliver Schmidt, 2011-05-02
|
||||
;
|
||||
; const char tgi_stddrv[];
|
||||
;
|
||||
|
||||
.export _tgi_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_tgi_stddrv: .asciiz "geos-tgi.tgi"
|
||||
21
libsrc/geos-cbm/disk/Makefile
Normal file
21
libsrc/geos-cbm/disk/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
#
|
||||
# Makefile for GEOS lib
|
||||
# for cc65
|
||||
#
|
||||
|
||||
%.o: %.s
|
||||
@$(AS) -o $@ $(AFLAGS) $<
|
||||
|
||||
|
||||
S_OBJS = blkalloc.o calcblksfree.o changediskdevice.o chkdkgeos.o enterturbo.o exitturbo.o\
|
||||
findbambit.o freeblock.o getblock.o getdirhead.o getptrcurdknm.o newdisk.o\
|
||||
nxtblkalloc.o opendisk.o purgeturbo.o putblock.o putdirhead.o readblock.o\
|
||||
readbuff.o setnextfree.o setgeosdisk.o writeblock.o writebuff.o verwriteblock.o\
|
||||
gettrse.o setoserror.o\
|
||||
dio_openclose.o dio_cts.o dio_stc.o dio_read.o dio_write.o dio_writev.o\
|
||||
dio_params.o
|
||||
|
||||
all: $(S_OBJS)
|
||||
|
||||
clean:
|
||||
@$(RM) *.~ $(S_OBJS) core
|
||||
22
libsrc/geos-cbm/disk/blkalloc.s
Normal file
22
libsrc/geos-cbm/disk/blkalloc.s
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char BlkAlloc (struct tr_se output[], int length);
|
||||
|
||||
.import popax, setoserror
|
||||
.export _BlkAlloc
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_BlkAlloc:
|
||||
sta r2L
|
||||
stx r2H
|
||||
jsr popax
|
||||
sta r4L
|
||||
stx r4H
|
||||
jsr BlkAlloc
|
||||
jmp setoserror
|
||||
20
libsrc/geos-cbm/disk/calcblksfree.s
Normal file
20
libsrc/geos-cbm/disk/calcblksfree.s
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 21.12.99
|
||||
|
||||
; int CalcBlksFree (void);
|
||||
|
||||
.import __oserror
|
||||
.export _CalcBlksFree
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_CalcBlksFree:
|
||||
jsr CalcBlksFree
|
||||
stx __oserror
|
||||
lda r4L
|
||||
ldx r4H
|
||||
rts
|
||||
16
libsrc/geos-cbm/disk/changediskdevice.s
Normal file
16
libsrc/geos-cbm/disk/changediskdevice.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char ChangeDiskDevice (char newDriveNumber);
|
||||
|
||||
.import setoserror
|
||||
.export _ChangeDiskDevice
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_ChangeDiskDevice:
|
||||
jsr ChangeDiskDevice
|
||||
jmp setoserror
|
||||
19
libsrc/geos-cbm/disk/chkdkgeos.s
Normal file
19
libsrc/geos-cbm/disk/chkdkgeos.s
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char ChkDkGEOS (void);
|
||||
|
||||
.import setoserror
|
||||
.export _ChkDkGEOS
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_ChkDkGEOS:
|
||||
jsr ChkDkGEOS
|
||||
jsr setoserror
|
||||
lda isGEOS
|
||||
rts
|
||||
191
libsrc/geos-cbm/disk/dio_cts.s
Normal file
191
libsrc/geos-cbm/disk/dio_cts.s
Normal file
@@ -0,0 +1,191 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2.7.2001
|
||||
;
|
||||
;
|
||||
; unsigned char __fastcall__ dio_phys_to_log(dhandle_t handle,
|
||||
; dio_phys_pos *physpos, /* input */
|
||||
; sectnum_t *sectnum); /* output */
|
||||
;
|
||||
; dhandle_t - 16bit (ptr)
|
||||
; sectnum_t - 16bit
|
||||
;
|
||||
|
||||
.export _dio_phys_to_log
|
||||
.export sectab_1541_l, sectab_1541_h ; for log_to_phys
|
||||
.import popax,__oserror
|
||||
.importzp ptr1,ptr2,ptr3,tmp1,tmp2,tmp3,tmp4
|
||||
.include "../inc/dio.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.proc _dio_phys_to_log
|
||||
sta ptr1
|
||||
stx ptr1+1 ; pointer to result
|
||||
|
||||
jsr popax
|
||||
sta ptr2
|
||||
stx ptr2+1 ; pointer to input structure
|
||||
|
||||
jsr popax
|
||||
sta ptr3
|
||||
stx ptr3+1 ; pointer to handle
|
||||
|
||||
ldy #sst_flag
|
||||
lda (ptr3),y
|
||||
and #128
|
||||
beq _inv_hand ; handle not open or invalid
|
||||
|
||||
|
||||
ldy #diopp_head
|
||||
lda (ptr2),y
|
||||
bne _inv_data ; there is only head 0
|
||||
ldy #diopp_track
|
||||
lda (ptr2),y
|
||||
beq _inv_data ; there is no track 0
|
||||
sta tmp1
|
||||
iny
|
||||
lda (ptr2),y
|
||||
bne _inv_data ; there are no more than 256 tracks
|
||||
dec tmp1 ; normalize track to start from 0
|
||||
ldy #diopp_sector
|
||||
lda (ptr2),y
|
||||
sta tmp2
|
||||
iny
|
||||
lda (ptr2),y
|
||||
bne _inv_data ; there are no more than 256 sectors
|
||||
|
||||
; tmp1 (int) holds track+sector, translate it using device info
|
||||
|
||||
ldy #sst_driveno
|
||||
lda (ptr3),y
|
||||
tay
|
||||
lda driveType,y
|
||||
and #%00000011 ; this is for RamDrive compatibility
|
||||
cmp #DRV_1541
|
||||
beq dio_cts1541
|
||||
cmp #DRV_1571
|
||||
beq dio_cts1571
|
||||
cmp #DRV_1581
|
||||
beq dio_cts1581
|
||||
|
||||
lda #DEV_NOT_FOUND ; unknown device
|
||||
ldx #0
|
||||
beq ret
|
||||
|
||||
dio_ctsend:
|
||||
ldy #1
|
||||
lda tmp2
|
||||
sta (ptr1),y
|
||||
dey
|
||||
lda tmp1
|
||||
sta (ptr1),y
|
||||
|
||||
ldx #0
|
||||
txa
|
||||
ret:
|
||||
sta __oserror
|
||||
rts ; return success
|
||||
|
||||
; errors
|
||||
|
||||
_inv_data:
|
||||
lda #INV_TRACK
|
||||
.byte $2c
|
||||
_inv_hand:
|
||||
lda #INCOMPATIBLE
|
||||
ldx #0
|
||||
beq ret
|
||||
|
||||
; device-depended stuff, tmp1=track-1, tmp2=sector
|
||||
|
||||
dio_cts1541:
|
||||
ldy tmp1
|
||||
cpy #35
|
||||
bcs _inv_data
|
||||
lda sectab_1541_l,y
|
||||
clc
|
||||
adc tmp2
|
||||
sta tmp1
|
||||
lda sectab_1541_h,y
|
||||
adc #0
|
||||
sta tmp2
|
||||
jmp dio_ctsend
|
||||
|
||||
dio_cts1571:
|
||||
lda tmp1
|
||||
cmp #70
|
||||
bcs _inv_data
|
||||
cmp #35 ; last track of one side
|
||||
bcs _sub35
|
||||
jmp dio_cts1541 ; track <=35 - same as 1541
|
||||
|
||||
_sub35:
|
||||
sec
|
||||
sbc #35
|
||||
sta tmp1
|
||||
jsr dio_cts1541 ; get offset on second side of disk
|
||||
lda tmp1 ; add second side base
|
||||
clc
|
||||
adc #<683
|
||||
sta tmp1
|
||||
lda tmp2
|
||||
adc #>683
|
||||
sta tmp2
|
||||
jmp dio_ctsend
|
||||
|
||||
dio_cts1581:
|
||||
; 1581 has 80 tracks, 40 sectors each secnum=track*40+sector
|
||||
ldx #0
|
||||
stx tmp3
|
||||
stx tmp4
|
||||
lda tmp1
|
||||
beq _nomult
|
||||
cmp #80
|
||||
bcs _inv_data
|
||||
|
||||
; mul40 by Christian Groessler
|
||||
sta tmp4
|
||||
asl a
|
||||
rol tmp3
|
||||
asl a
|
||||
rol tmp3 ; val * 4
|
||||
adc tmp4
|
||||
bcc L1
|
||||
inc tmp3 ; val * 5
|
||||
L1: asl a
|
||||
rol tmp3 ; val * 10
|
||||
asl a
|
||||
rol tmp3
|
||||
asl a
|
||||
rol tmp3 ; val * 40 = AX
|
||||
ldx tmp3
|
||||
sta tmp3
|
||||
stx tmp4
|
||||
|
||||
_nomult:
|
||||
lda tmp2
|
||||
clc
|
||||
adc tmp3
|
||||
sta tmp1
|
||||
lda tmp4
|
||||
adc #0
|
||||
sta tmp2
|
||||
jmp dio_ctsend
|
||||
|
||||
.endproc
|
||||
|
||||
.rodata
|
||||
|
||||
sectab_1541_l:
|
||||
.byte $00, $15, $2a, $3f, $54, $69, $7e, $93
|
||||
.byte $a8, $bd, $d2, $e7, $fc, $11, $26, $3b
|
||||
.byte $50, $65, $78, $8b, $9e, $b1, $c4, $d7
|
||||
.byte $ea, $fc, $0e, $20, $32, $44, $56, $67
|
||||
.byte $78, $89, $9a, $ab
|
||||
sectab_1541_h:
|
||||
.byte $00, $00, $00, $00, $00, $00, $00, $00
|
||||
.byte $00, $00, $00, $00, $00, $01, $01, $01
|
||||
.byte $01, $01, $01, $01, $01, $01, $01, $01
|
||||
.byte $01, $01, $02, $02, $02, $02, $02, $02
|
||||
.byte $02, $02, $02, $02
|
||||
85
libsrc/geos-cbm/disk/dio_openclose.s
Normal file
85
libsrc/geos-cbm/disk/dio_openclose.s
Normal file
@@ -0,0 +1,85 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; based on Atari version by Christian Groessler
|
||||
; 2.7.2001
|
||||
;
|
||||
; dhandle_t __fastcall__ dio_open (driveid_t drive_id);
|
||||
; unsigned char __fastcall__ dio_close (dhandle_t handle);
|
||||
;
|
||||
; dio_open sets given device as current and initializes disk
|
||||
; dio_close does nothing special
|
||||
|
||||
.export _dio_open, _dio_close
|
||||
.import __oserror, _OpenDisk
|
||||
.importzp ptr1, tmp1
|
||||
.include "../inc/dio.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.bss
|
||||
|
||||
sectsizetab:
|
||||
.res 4 * sst_size ; this is hardcoded
|
||||
|
||||
.code
|
||||
|
||||
.proc _dio_open
|
||||
pha
|
||||
tax
|
||||
lda driveType,x ; check if there's a device
|
||||
beq _inv_drive
|
||||
txa
|
||||
clc
|
||||
adc #8 ; normalize devnum
|
||||
sta curDevice
|
||||
jsr SetDevice
|
||||
jsr _OpenDisk ; take care for errors there
|
||||
|
||||
pla
|
||||
tay ; drive #
|
||||
asl a ; make index from drive id
|
||||
asl a
|
||||
tax
|
||||
|
||||
lda #0
|
||||
sta sectsizetab+sst_sectsize,x
|
||||
lda #128
|
||||
sta sectsizetab+sst_flag,x ; set flag that drive is "open"
|
||||
lda #1
|
||||
sta sectsizetab+sst_sectsize+1,x
|
||||
tya
|
||||
sta sectsizetab+sst_driveno,x
|
||||
|
||||
stx tmp1
|
||||
lda #<sectsizetab
|
||||
clc
|
||||
adc tmp1
|
||||
sta tmp1
|
||||
lda #>sectsizetab
|
||||
adc #0
|
||||
tax
|
||||
lda tmp1
|
||||
|
||||
rts
|
||||
|
||||
_inv_drive:
|
||||
lda #DEV_NOT_FOUND
|
||||
sta __oserror
|
||||
lda #0
|
||||
tax
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
.proc _dio_close
|
||||
sta ptr1
|
||||
stx ptr1+1
|
||||
lda #0
|
||||
ldy #sst_flag
|
||||
sta (ptr1),y
|
||||
sta __oserror ; success
|
||||
tax
|
||||
rts ; return no error
|
||||
.endproc
|
||||
51
libsrc/geos-cbm/disk/dio_params.s
Normal file
51
libsrc/geos-cbm/disk/dio_params.s
Normal file
@@ -0,0 +1,51 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2.7.2001
|
||||
;
|
||||
; this function is used by dio_read and dio_write to fix parameters (secnum)
|
||||
; this function calls SetDevice so that more than one drive can be used at once
|
||||
|
||||
.import popax,pushax,_dio_log_to_phys
|
||||
.importzp ptr1
|
||||
.export dio_params,dio_secnum
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/dio.inc"
|
||||
|
||||
.bss
|
||||
dio_secnum: .res 2
|
||||
|
||||
.code
|
||||
.proc dio_params
|
||||
|
||||
sta r4L
|
||||
stx r4H
|
||||
|
||||
jsr popax
|
||||
sta dio_secnum
|
||||
stx dio_secnum
|
||||
|
||||
jsr popax ; get 3rd parameter
|
||||
pha ; save it
|
||||
txa
|
||||
pha
|
||||
jsr pushax ; put it back
|
||||
pla ; restore it
|
||||
sta ptr1+1
|
||||
pla
|
||||
sta ptr1
|
||||
ldy #sst_driveno
|
||||
lda (ptr1),y
|
||||
clc
|
||||
adc #8
|
||||
jsr SetDevice ; setup device, load driver
|
||||
|
||||
lda #<dio_secnum
|
||||
ldx #>dio_secnum
|
||||
jsr pushax
|
||||
|
||||
lda #<r1L
|
||||
ldx #>r1H
|
||||
jmp _dio_log_to_phys
|
||||
|
||||
.endproc
|
||||
25
libsrc/geos-cbm/disk/dio_read.s
Normal file
25
libsrc/geos-cbm/disk/dio_read.s
Normal file
@@ -0,0 +1,25 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2.7.2001
|
||||
;
|
||||
; this file provides the _dio_read function
|
||||
;
|
||||
; unsigned char __fastcall__ dio_read(dhandle_t handle,sectnum_t sect_num,void *buffer);
|
||||
; dhandle_t - 16bit (ptr)
|
||||
; sectnum_t - 16bit
|
||||
;
|
||||
|
||||
.import dio_params, __oserror
|
||||
.export _dio_read
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
.proc _dio_read
|
||||
|
||||
jsr dio_params
|
||||
jsr ReadBlock
|
||||
stx __oserror
|
||||
txa
|
||||
rts
|
||||
|
||||
.endproc
|
||||
182
libsrc/geos-cbm/disk/dio_stc.s
Normal file
182
libsrc/geos-cbm/disk/dio_stc.s
Normal file
@@ -0,0 +1,182 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2.7.2001
|
||||
;
|
||||
; unsigned char __fastcall__ dio_log_to_phys(dhandle_t handle,
|
||||
; sectnum_t *sectnum, /* input */
|
||||
; dio_phys_pos *physpos); /* output */
|
||||
;
|
||||
; dhandle_t - 16bit (ptr)
|
||||
; sectnum_t - 16bit
|
||||
;
|
||||
|
||||
.export _dio_log_to_phys
|
||||
.importzp ptr1,ptr2,ptr3,tmp1,tmp2
|
||||
.import popax,__oserror
|
||||
.import sectab_1541_l, sectab_1541_h
|
||||
.include "../inc/dio.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.proc _dio_log_to_phys
|
||||
|
||||
; check device type
|
||||
sta ptr1
|
||||
stx ptr1+1 ; pointer to result (struct dio_phys_pos)
|
||||
|
||||
jsr popax
|
||||
sta ptr2
|
||||
stx ptr2+1 ; pointer to input structure (pointer to int)
|
||||
|
||||
jsr popax
|
||||
sta ptr3
|
||||
stx ptr3+1 ; pointer to handle
|
||||
|
||||
ldy #sst_flag
|
||||
lda (ptr3),y
|
||||
and #128
|
||||
beq _inv_hand ; handle not open or invalid
|
||||
|
||||
; fill in all we have
|
||||
ldy #diopp_head
|
||||
lda #0 ; head 0
|
||||
sta (ptr1),y
|
||||
ldy #diopp_track+1
|
||||
sta (ptr1),y ; track <256
|
||||
ldy #diopp_sector+1
|
||||
sta (ptr1),y ; sector <256
|
||||
|
||||
ldy #0
|
||||
lda (ptr2),y
|
||||
sta tmp1
|
||||
iny
|
||||
lda (ptr2),y
|
||||
sta tmp2
|
||||
|
||||
; get drive info
|
||||
ldy #sst_driveno
|
||||
lda (ptr3),y
|
||||
tay
|
||||
lda driveType,y
|
||||
and #%00000011 ; this is for RamDrive compatibility
|
||||
cmp #DRV_1541
|
||||
beq dio_stc1541
|
||||
cmp #DRV_1571
|
||||
beq dio_stc1571
|
||||
cmp #DRV_1581
|
||||
beq dio_stc1581
|
||||
|
||||
lda #DEV_NOT_FOUND ; unknown device
|
||||
ldx #0
|
||||
beq _ret
|
||||
|
||||
dio_stcend:
|
||||
ldy #diopp_track
|
||||
lda tmp1
|
||||
sta (ptr1),y
|
||||
ldy #diopp_sector
|
||||
lda tmp2
|
||||
sta (ptr1),y
|
||||
|
||||
ldx #0
|
||||
txa
|
||||
_ret:
|
||||
sta __oserror
|
||||
rts ; return success
|
||||
|
||||
; errors
|
||||
_inv_data:
|
||||
lda #INV_TRACK
|
||||
.byte $2c
|
||||
_inv_hand:
|
||||
lda #INCOMPATIBLE
|
||||
ldx #0
|
||||
beq _ret
|
||||
|
||||
dio_stc1541:
|
||||
; if 1541:
|
||||
; - compare with table to find track
|
||||
; - subtract and find sector
|
||||
|
||||
ldx #0 ; index=(track-1)
|
||||
_loop41:
|
||||
lda tmp2
|
||||
cmp sectab_1541_h+1,x
|
||||
bne _nxt
|
||||
lda tmp1
|
||||
cmp sectab_1541_l+1,x
|
||||
bcc _found
|
||||
_nxt: inx
|
||||
cpx #35
|
||||
bne _loop41
|
||||
beq _inv_data
|
||||
|
||||
_found:
|
||||
lda tmp1
|
||||
sec
|
||||
sbc sectab_1541_l,x
|
||||
sta tmp2
|
||||
_fndend:
|
||||
inx
|
||||
stx tmp1
|
||||
jmp dio_stcend
|
||||
|
||||
dio_stc1571:
|
||||
; if 1571:
|
||||
; - check size, if too big - subtract and add 35 to track
|
||||
; - fall down to 1541
|
||||
lda tmp2
|
||||
cmp #>683
|
||||
bne _cnt71
|
||||
lda tmp1
|
||||
cmp #<683
|
||||
bcc dio_stc1541
|
||||
|
||||
_cnt71:
|
||||
lda tmp1
|
||||
sec
|
||||
sbc #<683
|
||||
sta tmp1
|
||||
lda tmp2
|
||||
sbc #>683
|
||||
sta tmp2
|
||||
jsr dio_stc1541 ; will fall through here
|
||||
|
||||
ldy #diopp_track
|
||||
lda (ptr1),y
|
||||
clc
|
||||
adc #35
|
||||
sta (ptr1),y
|
||||
lda #0
|
||||
beq _ret
|
||||
|
||||
; if 1581:
|
||||
; - subtract 40 in loop (at most 80 times) to find track
|
||||
; - the remainder is sector
|
||||
dio_stc1581:
|
||||
ldx #0 ; index=(track-1)
|
||||
_loop81:
|
||||
lda tmp2
|
||||
bne _sub81
|
||||
lda tmp1
|
||||
cmp #40
|
||||
bcc _got81
|
||||
_sub81: lda tmp1
|
||||
sec
|
||||
sbc #40
|
||||
sta tmp1
|
||||
lda tmp2
|
||||
sbc #0
|
||||
sta tmp2
|
||||
inx
|
||||
cpx #81
|
||||
bne _loop81
|
||||
beq _inv_data
|
||||
|
||||
_got81: lda tmp1
|
||||
sta tmp2
|
||||
inx
|
||||
stx tmp1
|
||||
jmp dio_stcend
|
||||
|
||||
.endproc
|
||||
23
libsrc/geos-cbm/disk/dio_write.s
Normal file
23
libsrc/geos-cbm/disk/dio_write.s
Normal file
@@ -0,0 +1,23 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2.7.2001
|
||||
;
|
||||
; this file provides the _dio_write function
|
||||
;
|
||||
; unsigned char __fastcall__ dio_write(dhandle_t handle,sectnum_t sect_num,const void *buffer);
|
||||
; dhandle_t - 16bit (ptr)
|
||||
; sectnum_t - 16bit
|
||||
;
|
||||
|
||||
.import dio_params, setoserror
|
||||
.export _dio_write
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
.proc _dio_write
|
||||
|
||||
jsr dio_params
|
||||
jsr WriteBlock
|
||||
jmp setoserror
|
||||
|
||||
.endproc
|
||||
25
libsrc/geos-cbm/disk/dio_writev.s
Normal file
25
libsrc/geos-cbm/disk/dio_writev.s
Normal file
@@ -0,0 +1,25 @@
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
; 2.7.2001
|
||||
;
|
||||
; this file provides the _dio_write function
|
||||
;
|
||||
; unsigned char __fastcall__ dio_write_verify(dhandle_t handle,sectnum_t sect_num,const void *buffer);
|
||||
; dhandle_t - 16bit (ptr)
|
||||
; sectnum_t - 16bit
|
||||
;
|
||||
|
||||
.import dio_params, __oserror
|
||||
.export _dio_write_verify
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
.proc _dio_write_verify
|
||||
|
||||
jsr dio_params
|
||||
jsr VerWriteBlock
|
||||
stx __oserror
|
||||
txa
|
||||
rts
|
||||
|
||||
.endproc
|
||||
13
libsrc/geos-cbm/disk/enterturbo.s
Normal file
13
libsrc/geos-cbm/disk/enterturbo.s
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 21.12.99
|
||||
|
||||
; void EnterTurbo (void);
|
||||
|
||||
.export _EnterTurbo
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_EnterTurbo = EnterTurbo
|
||||
13
libsrc/geos-cbm/disk/exitturbo.s
Normal file
13
libsrc/geos-cbm/disk/exitturbo.s
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 21.12.99
|
||||
|
||||
; void ExitTurbo (void);
|
||||
|
||||
.export _ExitTurbo
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_ExitTurbo = ExitTurbo
|
||||
24
libsrc/geos-cbm/disk/findbambit.s
Normal file
24
libsrc/geos-cbm/disk/findbambit.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char FindBAMBit (struct tr_se *TS);
|
||||
; (might be called inUSE (if (!inUSE(block))))
|
||||
|
||||
.import gettrse
|
||||
.import return0, return1
|
||||
.export _FindBAMBit
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_FindBAMBit:
|
||||
jsr gettrse
|
||||
sta r6L
|
||||
stx r6H
|
||||
jsr FindBAMBit
|
||||
bne inUse
|
||||
jmp return0
|
||||
inUse: jmp return1
|
||||
20
libsrc/geos-cbm/disk/freeblock.s
Normal file
20
libsrc/geos-cbm/disk/freeblock.s
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char FreeBlock (struct tr_se *TS);
|
||||
|
||||
.import gettrse, setoserror
|
||||
.export _FreeBlock
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_FreeBlock:
|
||||
jsr gettrse
|
||||
sta r6L
|
||||
stx r6H
|
||||
jsr FreeBlock
|
||||
jmp setoserror
|
||||
24
libsrc/geos-cbm/disk/getblock.s
Normal file
24
libsrc/geos-cbm/disk/getblock.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char GetBlock (struct tr_se *myTS, char *buffer);
|
||||
|
||||
.import popax, setoserror
|
||||
.import gettrse
|
||||
.export _GetBlock
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_GetBlock:
|
||||
sta r4L
|
||||
stx r4H
|
||||
jsr popax
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr GetBlock
|
||||
jmp setoserror
|
||||
16
libsrc/geos-cbm/disk/getdirhead.s
Normal file
16
libsrc/geos-cbm/disk/getdirhead.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char GetDirHead (void);
|
||||
|
||||
.import setoserror
|
||||
.export _GetDirHead
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_GetDirHead:
|
||||
jsr GetDirHead
|
||||
jmp setoserror
|
||||
35
libsrc/geos-cbm/disk/getptrcurdknm.s
Normal file
35
libsrc/geos-cbm/disk/getptrcurdknm.s
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 21.12.99
|
||||
|
||||
; void GetPtrCurDkNm (char *curName);
|
||||
; (fills curName[17] with current disk's name)
|
||||
|
||||
.importzp ptr4, ptr3
|
||||
.import __oserror
|
||||
.export _GetPtrCurDkNm
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_GetPtrCurDkNm:
|
||||
sta ptr3
|
||||
stx ptr3+1
|
||||
ldx #ptr4
|
||||
jsr GetPtrCurDkNm
|
||||
ldy #0
|
||||
txa
|
||||
bne fin
|
||||
namelp: lda (ptr4),y
|
||||
cmp #$a0
|
||||
beq fin
|
||||
sta (ptr3),y
|
||||
iny
|
||||
cpy #16
|
||||
bne namelp
|
||||
fin: lda #0
|
||||
sta (ptr3),y
|
||||
stx __oserror
|
||||
rts
|
||||
17
libsrc/geos-cbm/disk/gettrse.s
Normal file
17
libsrc/geos-cbm/disk/gettrse.s
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 29.1.00
|
||||
|
||||
.export gettrse
|
||||
.importzp ptr4
|
||||
gettrse:
|
||||
sta ptr4
|
||||
stx ptr4+1
|
||||
ldy #1
|
||||
lda (ptr4),y
|
||||
tax
|
||||
dey
|
||||
lda (ptr4),y
|
||||
rts
|
||||
16
libsrc/geos-cbm/disk/newdisk.s
Normal file
16
libsrc/geos-cbm/disk/newdisk.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char NewDisk (void);
|
||||
|
||||
.import setoserror
|
||||
.export _NewDisk
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_NewDisk:
|
||||
jsr NewDisk
|
||||
jmp setoserror
|
||||
28
libsrc/geos-cbm/disk/nxtblkalloc.s
Normal file
28
libsrc/geos-cbm/disk/nxtblkalloc.s
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char NxtBlkAlloc (struct tr_se *startTS, struct tr_se output[], int length );
|
||||
|
||||
.import popax, setoserror
|
||||
.import gettrse
|
||||
.importzp ptr4
|
||||
.export _NxtBlkAlloc
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_NxtBlkAlloc:
|
||||
sta r2L
|
||||
stx r2H
|
||||
jsr popax
|
||||
sta r4L
|
||||
stx r4H
|
||||
jsr popax
|
||||
jsr gettrse
|
||||
sta r3L
|
||||
stx r3H
|
||||
jsr NxtBlkAlloc
|
||||
jmp setoserror
|
||||
16
libsrc/geos-cbm/disk/opendisk.s
Normal file
16
libsrc/geos-cbm/disk/opendisk.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char OpenDisk (void);
|
||||
|
||||
.import setoserror
|
||||
.export _OpenDisk
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_OpenDisk:
|
||||
jsr OpenDisk
|
||||
jmp setoserror
|
||||
13
libsrc/geos-cbm/disk/purgeturbo.s
Normal file
13
libsrc/geos-cbm/disk/purgeturbo.s
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 21.12.99
|
||||
|
||||
; void PurgeTurbo (void);
|
||||
|
||||
.export _PurgeTurbo
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_PurgeTurbo = PurgeTurbo
|
||||
24
libsrc/geos-cbm/disk/putblock.s
Normal file
24
libsrc/geos-cbm/disk/putblock.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char PutBlock (struct tr_se *myTS, char *buffer);
|
||||
|
||||
.import popax, setoserror
|
||||
.import gettrse
|
||||
.export _PutBlock
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_PutBlock:
|
||||
sta r4L
|
||||
stx r4H
|
||||
jsr popax
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr PutBlock
|
||||
jmp setoserror
|
||||
16
libsrc/geos-cbm/disk/putdirhead.s
Normal file
16
libsrc/geos-cbm/disk/putdirhead.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.99, 2.1.2003
|
||||
|
||||
; char PutDirHead (void);
|
||||
|
||||
.import setoserror
|
||||
.export _PutDirHead
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_PutDirHead:
|
||||
jsr PutDirHead
|
||||
jmp setoserror
|
||||
24
libsrc/geos-cbm/disk/readblock.s
Normal file
24
libsrc/geos-cbm/disk/readblock.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char ReadBlock (struct tr_se myTS, char *buffer);
|
||||
|
||||
.import popax, setoserror
|
||||
.import gettrse
|
||||
.export _ReadBlock
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_ReadBlock:
|
||||
sta r4L
|
||||
stx r4H
|
||||
jsr popax
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr ReadBlock
|
||||
jmp setoserror
|
||||
21
libsrc/geos-cbm/disk/readbuff.s
Normal file
21
libsrc/geos-cbm/disk/readbuff.s
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 26.10.1999, 2.1.2003
|
||||
|
||||
; char ReadBuff (struct tr_se);
|
||||
|
||||
.import setoserror
|
||||
.import gettrse
|
||||
.export _ReadBuff
|
||||
|
||||
.include "../inc/diskdrv.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_ReadBuff:
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr ReadBuff
|
||||
jmp setoserror
|
||||
16
libsrc/geos-cbm/disk/setgeosdisk.s
Normal file
16
libsrc/geos-cbm/disk/setgeosdisk.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char SetGEOSDisk (void);
|
||||
|
||||
.import setoserror
|
||||
.export _SetGEOSDisk
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_SetGEOSDisk:
|
||||
jsr SetGEOSDisk
|
||||
jmp setoserror
|
||||
24
libsrc/geos-cbm/disk/setnextfree.s
Normal file
24
libsrc/geos-cbm/disk/setnextfree.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 21.12.99
|
||||
|
||||
; struct tr_se SetNextFree (struct tr_se *startTS);
|
||||
|
||||
.import __oserror
|
||||
.import gettrse
|
||||
.export _SetNextFree
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_SetNextFree:
|
||||
jsr gettrse
|
||||
sta r3L
|
||||
stx r3H
|
||||
jsr SetNextFree
|
||||
stx __oserror
|
||||
lda r3L
|
||||
ldx r3H
|
||||
rts
|
||||
16
libsrc/geos-cbm/disk/setoserror.s
Normal file
16
libsrc/geos-cbm/disk/setoserror.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 2.1.2003
|
||||
;
|
||||
|
||||
.export setoserror
|
||||
.import __oserror
|
||||
|
||||
setoserror:
|
||||
stx __oserror
|
||||
txa
|
||||
ldx #0 ; X is cleared (high byte for promoting char to int)
|
||||
tay ; Y register is used just to save flags state
|
||||
rts
|
||||
24
libsrc/geos-cbm/disk/verwriteblock.s
Normal file
24
libsrc/geos-cbm/disk/verwriteblock.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char VerWriteBlock (struct tr_se *myTS, char *buffer);
|
||||
|
||||
.import popax, setoserror
|
||||
.import gettrse
|
||||
.export _VerWriteBlock
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_VerWriteBlock:
|
||||
sta r4L
|
||||
stx r4H
|
||||
jsr popax
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr VerWriteBlock
|
||||
jmp setoserror
|
||||
24
libsrc/geos-cbm/disk/writeblock.s
Normal file
24
libsrc/geos-cbm/disk/writeblock.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 21.12.1999, 2.1.2003
|
||||
|
||||
; char WriteBlock (struct tr_se *myTS, char *buffer);
|
||||
|
||||
.import popax, setoserror
|
||||
.import gettrse
|
||||
.export _WriteBlock
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_WriteBlock:
|
||||
sta r4L
|
||||
stx r4H
|
||||
jsr popax
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr WriteBlock
|
||||
jmp setoserror
|
||||
21
libsrc/geos-cbm/disk/writebuff.s
Normal file
21
libsrc/geos-cbm/disk/writebuff.s
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 26.10.1999, 2.1.2003
|
||||
|
||||
; char WriteBuff (struct tr_se*);
|
||||
|
||||
.import setoserror
|
||||
.import gettrse
|
||||
.export _WriteBuff
|
||||
|
||||
.include "../inc/diskdrv.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_WriteBuff:
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr WriteBuff
|
||||
jmp setoserror
|
||||
22
libsrc/geos-cbm/dlgbox/Makefile
Normal file
22
libsrc/geos-cbm/dlgbox/Makefile
Normal file
@@ -0,0 +1,22 @@
|
||||
#
|
||||
# Makefile for GEOS lib
|
||||
# for cc65
|
||||
#
|
||||
#
|
||||
|
||||
%.o: %.c
|
||||
@$(CC) $(CFLAGS) $<
|
||||
@$(AS) -g -o $@ $(AFLAGS) $(*).s
|
||||
|
||||
%.o: %.s
|
||||
@$(AS) -o $@ $(AFLAGS) $<
|
||||
|
||||
C_OBJS = messagebox.o
|
||||
S_OBJS = dodlgbox.o rstrfrmdialogue.o\
|
||||
dbget2lines.o dlgboxyesno.o dlgboxokcancel.o dlgboxok.o dlgboxgetstring.o\
|
||||
dlgboxfileselect.o
|
||||
|
||||
all: $(C_OBJS) $(S_OBJS)
|
||||
|
||||
clean:
|
||||
@$(RM) core *.~ $(S_OBJS) $(C_OBJS:.o=.s) $(C_OBJS)
|
||||
37
libsrc/geos-cbm/dlgbox/dbget2lines.s
Normal file
37
libsrc/geos-cbm/dlgbox/dbget2lines.s
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.99
|
||||
|
||||
.export DB_get2lines
|
||||
.importzp ptr3,ptr4
|
||||
.import popax
|
||||
|
||||
.code
|
||||
|
||||
DB_get2lines:
|
||||
sta ptr4 ; fetch line 2
|
||||
stx ptr4+1
|
||||
jsr popax
|
||||
sta ptr3 ; fetch line 1
|
||||
stx ptr3+1
|
||||
ldx #ptr3
|
||||
jsr checknull
|
||||
ldx #ptr4
|
||||
jmp checknull
|
||||
|
||||
checknull:
|
||||
lda $0,x
|
||||
ora $1,x
|
||||
bne cn_end
|
||||
lda #<nullstring
|
||||
sta $0,x
|
||||
lda #>nullstring
|
||||
sta $1,x
|
||||
cn_end: rts
|
||||
|
||||
.rodata
|
||||
|
||||
nullstring:
|
||||
.byte 0
|
||||
59
libsrc/geos-cbm/dlgbox/dlgboxfileselect.s
Normal file
59
libsrc/geos-cbm/dlgbox/dlgboxfileselect.s
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.99
|
||||
|
||||
; char DlgBoxFileSelect (char *class, char ftype, char *fname);
|
||||
|
||||
.export _DlgBoxFileSelect
|
||||
.import popa, popax
|
||||
.import _DoDlgBox
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
.include "../inc/geosmac.ca65.inc"
|
||||
|
||||
.code
|
||||
|
||||
_DlgBoxFileSelect:
|
||||
|
||||
sta tmp_r5
|
||||
stx tmp_r5+1
|
||||
jsr popa
|
||||
sta tmp_r7L
|
||||
jsr popax
|
||||
sta tmp_r10
|
||||
stx tmp_r10+1
|
||||
|
||||
DB_FS_reload:
|
||||
MoveW tmp_r5, r5
|
||||
MoveW tmp_r10, r10
|
||||
MoveB tmp_r7L, r7L
|
||||
|
||||
lda #<paramStrFileSelect
|
||||
ldx #>paramStrFileSelect
|
||||
jsr _DoDlgBox
|
||||
cmp #DISK
|
||||
bne DB_FS_Fin
|
||||
jsr OpenDisk
|
||||
txa
|
||||
beq DB_FS_reload
|
||||
DB_FS_Fin: rts
|
||||
|
||||
.rodata
|
||||
|
||||
paramStrFileSelect:
|
||||
.byte DEF_DB_POS | 1
|
||||
.byte DBGETFILES, 4, 4
|
||||
.byte OPEN, DBI_X_2, DBI_Y_0+16
|
||||
.byte DISK, DBI_X_2, DBI_Y_0+32+1
|
||||
.byte CANCEL, DBI_X_2, DBI_Y_0+64+3
|
||||
.byte NULL
|
||||
|
||||
.bss
|
||||
|
||||
tmp_r5: .res 2
|
||||
tmp_r7L: .res 1
|
||||
tmp_r10: .res 2
|
||||
39
libsrc/geos-cbm/dlgbox/dlgboxgetstring.s
Normal file
39
libsrc/geos-cbm/dlgbox/dlgboxgetstring.s
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.99
|
||||
|
||||
; char DlgBoxGetString (char *string, char strlen, char *line1,char *line2);
|
||||
|
||||
.export _DlgBoxGetString
|
||||
.import DB_get2lines, _DoDlgBox
|
||||
.importzp ptr2, ptr3, ptr4
|
||||
.import popa, popax
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.code
|
||||
|
||||
_DlgBoxGetString:
|
||||
jsr DB_get2lines
|
||||
jsr popa
|
||||
sta DB_strlen
|
||||
jsr popax
|
||||
sta ptr2
|
||||
stx ptr2+1
|
||||
lda #<paramStrGetString
|
||||
ldx #>paramStrGetString
|
||||
jmp _DoDlgBox
|
||||
|
||||
.data
|
||||
|
||||
paramStrGetString:
|
||||
.byte DEF_DB_POS | 1
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_1_Y, ptr3
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr4
|
||||
.byte DBGETSTRING, TXT_LN_X, TXT_LN_3_Y, ptr2
|
||||
DB_strlen: .byte 17
|
||||
.byte CANCEL, DBI_X_2, DBI_Y_2
|
||||
.byte NULL
|
||||
31
libsrc/geos-cbm/dlgbox/dlgboxok.s
Normal file
31
libsrc/geos-cbm/dlgbox/dlgboxok.s
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.99
|
||||
|
||||
; char DlgBoxOk (char *line1,char *line2);
|
||||
|
||||
.export _DlgBoxOk
|
||||
.import DB_get2lines, _DoDlgBox
|
||||
.importzp ptr3, ptr4
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.code
|
||||
|
||||
_DlgBoxOk:
|
||||
jsr DB_get2lines
|
||||
lda #<paramStrOk
|
||||
ldx #>paramStrOk
|
||||
jmp _DoDlgBox
|
||||
|
||||
.rodata
|
||||
|
||||
paramStrOk:
|
||||
.byte DEF_DB_POS | 1
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr3
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_3_Y, ptr4
|
||||
.byte OK, DBI_X_0, DBI_Y_2
|
||||
.byte NULL
|
||||
32
libsrc/geos-cbm/dlgbox/dlgboxokcancel.s
Normal file
32
libsrc/geos-cbm/dlgbox/dlgboxokcancel.s
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.99
|
||||
|
||||
; char DlgBoxOkCancel (char *line1,char *line2);
|
||||
|
||||
.export _DlgBoxOkCancel
|
||||
.import DB_get2lines, _DoDlgBox
|
||||
.importzp ptr3, ptr4
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.code
|
||||
|
||||
_DlgBoxOkCancel:
|
||||
jsr DB_get2lines
|
||||
lda #<paramStrOkCancel
|
||||
ldx #>paramStrOkCancel
|
||||
jmp _DoDlgBox
|
||||
|
||||
.rodata
|
||||
|
||||
paramStrOkCancel:
|
||||
.byte DEF_DB_POS | 1
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr3
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_3_Y, ptr4
|
||||
.byte OK, DBI_X_0, DBI_Y_2
|
||||
.byte CANCEL, DBI_X_2, DBI_Y_2
|
||||
.byte NULL
|
||||
32
libsrc/geos-cbm/dlgbox/dlgboxyesno.s
Normal file
32
libsrc/geos-cbm/dlgbox/dlgboxyesno.s
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.99
|
||||
|
||||
; char DlgBoxYesNo (char *line1,char *line2);
|
||||
|
||||
.export _DlgBoxYesNo
|
||||
.import DB_get2lines, _DoDlgBox
|
||||
.importzp ptr3, ptr4
|
||||
|
||||
.include "../inc/geossym.inc"
|
||||
.include "../inc/const.inc"
|
||||
|
||||
.code
|
||||
|
||||
_DlgBoxYesNo:
|
||||
jsr DB_get2lines
|
||||
lda #<paramStrYesNo
|
||||
ldx #>paramStrYesNo
|
||||
jmp _DoDlgBox
|
||||
|
||||
.rodata
|
||||
|
||||
paramStrYesNo:
|
||||
.byte DEF_DB_POS | 1
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr3
|
||||
.byte DBVARSTR, TXT_LN_X, TXT_LN_3_Y, ptr4
|
||||
.byte YES, DBI_X_0, DBI_Y_2
|
||||
.byte NO, DBI_X_2, DBI_Y_2
|
||||
.byte NULL
|
||||
20
libsrc/geos-cbm/dlgbox/dodlgbox.s
Normal file
20
libsrc/geos-cbm/dlgbox/dodlgbox.s
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char DoDlgBox (char *myParamString);
|
||||
|
||||
.export _DoDlgBox
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_DoDlgBox:
|
||||
sta r0L
|
||||
stx r0H
|
||||
jsr DoDlgBox
|
||||
ldx #0
|
||||
lda r0L
|
||||
rts
|
||||
85
libsrc/geos-cbm/dlgbox/messagebox.c
Normal file
85
libsrc/geos-cbm/dlgbox/messagebox.c
Normal file
@@ -0,0 +1,85 @@
|
||||
|
||||
/*
|
||||
* char MessageBox (char mode, const char *format, ...)
|
||||
*
|
||||
* Maciej 'YTM/Elysium' Witkowiak, 17.08.2003
|
||||
*
|
||||
*/
|
||||
|
||||
#include <geos.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void _mbprintout(void);
|
||||
|
||||
static dlgBoxStr _mbdlg_EMPTY = {
|
||||
DB_DEFPOS(1),
|
||||
DB_OPVEC(&RstrFrmDialogue),
|
||||
DB_USRROUT(&_mbprintout),
|
||||
DB_END,
|
||||
};
|
||||
|
||||
static dlgBoxStr _mbdlg_OK = {
|
||||
DB_DEFPOS(1),
|
||||
DB_USRROUT(&_mbprintout),
|
||||
DB_ICON(OK, DBI_X_1, DBI_Y_2),
|
||||
DB_END,
|
||||
};
|
||||
|
||||
static dlgBoxStr _mbdlg_OKCANCEL = {
|
||||
DB_DEFPOS(1),
|
||||
DB_USRROUT(&_mbprintout),
|
||||
DB_ICON(OK, DBI_X_0, DBI_Y_2),
|
||||
DB_ICON(CANCEL, DBI_X_2, DBI_Y_2),
|
||||
DB_END,
|
||||
};
|
||||
|
||||
static dlgBoxStr _mbdlg_YESNO = {
|
||||
DB_DEFPOS(1),
|
||||
DB_USRROUT(&_mbprintout),
|
||||
DB_ICON(YES, DBI_X_0, DBI_Y_2),
|
||||
DB_ICON(NO, DBI_X_2, DBI_Y_2),
|
||||
DB_END,
|
||||
};
|
||||
|
||||
static dlgBoxStr *_mbboxes[] = {
|
||||
&_mbdlg_EMPTY,
|
||||
&_mbdlg_OK,
|
||||
&_mbdlg_OKCANCEL,
|
||||
&_mbdlg_YESNO
|
||||
};
|
||||
|
||||
static char _mbbuffer[256];
|
||||
|
||||
char MessageBox(char mode, const char *format, ...)
|
||||
{
|
||||
register char *buf;
|
||||
va_list ap;
|
||||
|
||||
/* first format out things */
|
||||
va_start(ap, format);
|
||||
vsprintf(_mbbuffer, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
/* replace LFs by CRs */
|
||||
buf = &_mbbuffer[0];
|
||||
while (*buf) {
|
||||
if (*buf==LF) *buf=CR;
|
||||
++buf;
|
||||
}
|
||||
|
||||
/* validate mode */
|
||||
if (mode>=MB_LAST)
|
||||
mode = MB_EMPTY;
|
||||
|
||||
return DoDlgBox(_mbboxes[mode]);
|
||||
}
|
||||
|
||||
void _mbprintout(void)
|
||||
{
|
||||
UseSystemFont();
|
||||
curWindow.top = DEF_DB_TOP;
|
||||
curWindow.left = DEF_DB_LEFT+10;
|
||||
curWindow.right = DEF_DB_RIGHT-10;
|
||||
curWindow.bot = DEF_DB_BOT;
|
||||
PutString(_mbbuffer, DEF_DB_TOP+10+curFontDesc.height, DEF_DB_LEFT+10 );
|
||||
}
|
||||
13
libsrc/geos-cbm/dlgbox/rstrfrmdialogue.s
Normal file
13
libsrc/geos-cbm/dlgbox/rstrfrmdialogue.s
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 25.12.99
|
||||
|
||||
; char RstrFrmDialogue (void);
|
||||
|
||||
.export _RstrFrmDialogue
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_RstrFrmDialogue = RstrFrmDialogue
|
||||
21
libsrc/geos-cbm/file/Makefile
Normal file
21
libsrc/geos-cbm/file/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
#
|
||||
# Makefile for GEOS lib
|
||||
# for cc65
|
||||
#
|
||||
|
||||
%.o: %.s
|
||||
@$(AS) -o $@ $(AFLAGS) $<
|
||||
|
||||
|
||||
S_OBJS = get1stdirentry.o getnxtdirentry.o\
|
||||
openrecordfile.o closerecordfile.o nextrecord.o previousrecord.o pointrecord.o\
|
||||
deleterecord.o insertrecord.o appendrecord.o readrecord.o writerecord.o\
|
||||
updaterecordfile.o\
|
||||
findfile.o followchain.o getfhdrinfo.o readfile.o savefile.o freefile.o\
|
||||
deletefile.o renamefile.o findftypes.o readbyte.o getfile.o\
|
||||
sysremove.o sysrename.o
|
||||
|
||||
all: $(S_OBJS)
|
||||
|
||||
clean:
|
||||
@$(RM) *.~ $(S_OBJS) core
|
||||
17
libsrc/geos-cbm/file/appendrecord.s
Normal file
17
libsrc/geos-cbm/file/appendrecord.s
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char AppendRecord (void);
|
||||
|
||||
.import setoserror
|
||||
.export _AppendRecord
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_AppendRecord:
|
||||
|
||||
jsr AppendRecord
|
||||
jmp setoserror
|
||||
16
libsrc/geos-cbm/file/closerecordfile.s
Normal file
16
libsrc/geos-cbm/file/closerecordfile.s
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char CloseRecordFile (void);
|
||||
|
||||
.import setoserror
|
||||
.export _CloseRecordFile
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
|
||||
_CloseRecordFile:
|
||||
jsr CloseRecordFile
|
||||
jmp setoserror
|
||||
19
libsrc/geos-cbm/file/deletefile.s
Normal file
19
libsrc/geos-cbm/file/deletefile.s
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char DeleteFile (char *myName);
|
||||
|
||||
.import setoserror
|
||||
.export _DeleteFile
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_DeleteFile:
|
||||
sta r0L
|
||||
stx r0H
|
||||
jsr DeleteFile
|
||||
jmp setoserror
|
||||
17
libsrc/geos-cbm/file/deleterecord.s
Normal file
17
libsrc/geos-cbm/file/deleterecord.s
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char DeleteRecord (void);
|
||||
|
||||
.import setoserror
|
||||
.export _DeleteRecord
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_DeleteRecord:
|
||||
jsr DeleteRecord
|
||||
jmp setoserror
|
||||
19
libsrc/geos-cbm/file/findfile.s
Normal file
19
libsrc/geos-cbm/file/findfile.s
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char FindFile (char *myName);
|
||||
|
||||
.import setoserror
|
||||
.export _FindFile
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_FindFile:
|
||||
sta r6L
|
||||
stx r6H
|
||||
jsr FindFile
|
||||
jmp setoserror
|
||||
38
libsrc/geos-cbm/file/findftypes.s
Normal file
38
libsrc/geos-cbm/file/findftypes.s
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char FindFTypes (char *buffer, char fileType, char fileMax, char *Class);
|
||||
|
||||
.export _FindFTypes
|
||||
.import popax, popa, setoserror
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
.code
|
||||
|
||||
_FindFTypes:
|
||||
sta r10L
|
||||
stx r10H
|
||||
jsr popa
|
||||
sta r7H
|
||||
sta tmpFileMax
|
||||
jsr popa
|
||||
sta r7L
|
||||
jsr popax
|
||||
sta r6L
|
||||
stx r6H
|
||||
jsr FindFTypes
|
||||
jsr setoserror
|
||||
; return (fileMax - r7H)
|
||||
lda tmpFileMax
|
||||
sec
|
||||
sbc r7H
|
||||
rts
|
||||
|
||||
.bss
|
||||
|
||||
tmpFileMax: .res 1
|
||||
24
libsrc/geos-cbm/file/followchain.s
Normal file
24
libsrc/geos-cbm/file/followchain.s
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char FollowChain (struct tr_se *myTrSe, char *buffer);
|
||||
|
||||
.export _FollowChain
|
||||
.import popax, setoserror
|
||||
.import gettrse
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_FollowChain:
|
||||
sta r3L
|
||||
stx r3H
|
||||
jsr popax
|
||||
jsr gettrse
|
||||
sta r1L
|
||||
stx r1H
|
||||
jsr FollowChain
|
||||
jmp setoserror
|
||||
19
libsrc/geos-cbm/file/freefile.s
Normal file
19
libsrc/geos-cbm/file/freefile.s
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char FreeFile (struct trse myTrSe[]);
|
||||
|
||||
.import setoserror
|
||||
.export _FreeFile
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_FreeFile:
|
||||
sta r9L
|
||||
stx r9H
|
||||
jsr FreeFile
|
||||
jmp setoserror
|
||||
20
libsrc/geos-cbm/file/get1stdirentry.s
Normal file
20
libsrc/geos-cbm/file/get1stdirentry.s
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 26.10.99
|
||||
|
||||
; struct filehandle* Get1stDirEntry (void);
|
||||
|
||||
.import __oserror
|
||||
.export _Get1stDirEntry
|
||||
|
||||
.include "../inc/diskdrv.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_Get1stDirEntry:
|
||||
jsr Get1stDirEntry
|
||||
stx __oserror
|
||||
lda r5L
|
||||
ldx r5H
|
||||
rts
|
||||
19
libsrc/geos-cbm/file/getfhdrinfo.s
Normal file
19
libsrc/geos-cbm/file/getfhdrinfo.s
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 25.12.1999, 2.1.2003
|
||||
|
||||
; char GetFHdrInfo (struct filehandle *myFile);
|
||||
|
||||
.import setoserror
|
||||
.export _GetFHdrInfo
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_GetFHdrInfo:
|
||||
sta r9L
|
||||
stx r9H
|
||||
jsr GetFHdrInfo
|
||||
jmp setoserror
|
||||
32
libsrc/geos-cbm/file/getfile.s
Normal file
32
libsrc/geos-cbm/file/getfile.s
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Elysium' Witkowiak
|
||||
;
|
||||
; 4.4.2003
|
||||
|
||||
; char __fastcall__ GetFile(char flag, const char *fname, const char *loadaddr, const char *datadname, char *datafname);
|
||||
|
||||
.export _GetFile
|
||||
.import popa, popax, setoserror
|
||||
|
||||
.include "../inc/jumptab.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_GetFile:
|
||||
sta r3L
|
||||
stx r3H
|
||||
jsr popax
|
||||
sta r2L
|
||||
stx r2H
|
||||
jsr popax
|
||||
sta r7L
|
||||
stx r7H
|
||||
jsr popax
|
||||
sta r6L
|
||||
stx r6H
|
||||
jsr popa
|
||||
sta r0L
|
||||
lda #0
|
||||
sta r10L
|
||||
jsr GetFile
|
||||
jmp setoserror
|
||||
20
libsrc/geos-cbm/file/getnxtdirentry.s
Normal file
20
libsrc/geos-cbm/file/getnxtdirentry.s
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
;
|
||||
; Maciej 'YTM/Alliance' Witkowiak
|
||||
;
|
||||
; 26.10.99
|
||||
|
||||
; struct filehandle* GetNxtDirEntry (void);
|
||||
|
||||
.import __oserror
|
||||
.export _GetNxtDirEntry
|
||||
|
||||
.include "../inc/diskdrv.inc"
|
||||
.include "../inc/geossym.inc"
|
||||
|
||||
_GetNxtDirEntry:
|
||||
jsr GetNxtDirEntry
|
||||
stx __oserror
|
||||
lda r5L
|
||||
ldx r5H
|
||||
rts
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user