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:
uz
2011-12-28 17:11:21 +00:00
parent 70a3bcb0df
commit e6d74e7205
215 changed files with 20 additions and 20 deletions

27
libsrc/geos-cbm/Makefile Normal file
View 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

View 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)

View 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);
}

View 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);
}
}

View 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);
}

View 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

View 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

View 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

View 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

View 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);
}
}

View 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;
}

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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)

View 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

View 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)

View 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

View 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

View 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

View 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

View 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"

View 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

View 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

View 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"

View 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"

View 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&sector 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)

View 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

View 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

View 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"

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -0,0 +1,13 @@
;
; Maciej 'YTM/Alliance' Witkowiak
;
; 21.12.99
; void EnterTurbo (void);
.export _EnterTurbo
.include "../inc/jumptab.inc"
_EnterTurbo = EnterTurbo

View File

@@ -0,0 +1,13 @@
;
; Maciej 'YTM/Alliance' Witkowiak
;
; 21.12.99
; void ExitTurbo (void);
.export _ExitTurbo
.include "../inc/jumptab.inc"
_ExitTurbo = ExitTurbo

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -0,0 +1,13 @@
;
; Maciej 'YTM/Alliance' Witkowiak
;
; 21.12.99
; void PurgeTurbo (void);
.export _PurgeTurbo
.include "../inc/jumptab.inc"
_PurgeTurbo = PurgeTurbo

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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)

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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 );
}

View File

@@ -0,0 +1,13 @@
;
; Maciej 'YTM/Alliance' Witkowiak
;
; 25.12.99
; char RstrFrmDialogue (void);
.export _RstrFrmDialogue
.include "../inc/jumptab.inc"
_RstrFrmDialogue = RstrFrmDialogue

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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