c64 \
cbm510 \
cbm610 \
- geos \
+ geos-cbm \
lynx \
nes \
pet \
#-----------------------------------------------------------------------------
# GEOS on the C64/128
-.PHONY: geoslib
-geoslib:
+.PHONY: geos-cbmlib
+geos-cbmlib:
CC=../$(CC) \
AS=../$(AS) \
AR=../$(AR) \
LD=../$(LD) \
- AFLAGS="-t geos --forget-inc-paths -I../../../asminc" \
- CFLAGS="-Osir -g -T -t geos --forget-inc-paths -I. -I../../../include" \
- $(MAKE) -C geos
+ AFLAGS="-t geos-cbm --forget-inc-paths -I../../../asminc" \
+ CFLAGS="-Osir -g -T -t geos-cbm --forget-inc-paths -I. -I../../../include" \
+ $(MAKE) -C geos-cbm
for i in em joystick tgi conio common runtime zlib; do \
CC=$(CC) \
AS=$(AS) \
LD=$(LD) \
- AFLAGS="-t geos --forget-inc-paths -I../../asminc" \
- CFLAGS="-Osir -g -T -t geos --forget-inc-paths -I. -I../../include" \
- $(MAKE) SYS=geos -C $$i || exit 1; \
+ AFLAGS="-t geos-cbm --forget-inc-paths -I../../asminc" \
+ CFLAGS="-Osir -g -T -t geos-cbm --forget-inc-paths -I. -I../../include" \
+ $(MAKE) SYS=geos-cbm -C $$i || exit 1; \
for objfile in $$i/*.o; do \
- if [ -f geos/$$objfile ]; then \
- $(AR) a geos.lib geos/$$objfile || exit 1; \
+ if [ -f geos-cbm/$$objfile ]; then \
+ $(AR) a geos-cbm.lib geos-cbm/$$objfile || exit 1; \
else \
- $(AR) a geos.lib $$objfile || exit 1; \
+ $(AR) a geos-cbm.lib $$objfile || exit 1; \
fi; \
done \
done
- cp geos/devel/*.emd .
- cp geos/devel/*.joy .
- cp geos/devel/*.tgi .
- if [ -d geos/extra ]; then \
- for i in geos/extra/*.o; do \
- cp $$i geos-`basename $$i` || exit 1; \
+ cp geos-cbm/devel/*.emd .
+ cp geos-cbm/devel/*.joy .
+ cp geos-cbm/devel/*.tgi .
+ if [ -d geos-cbm/extra ]; then \
+ for i in geos-cbm/extra/*.o; do \
+ cp $$i geos-cbm-`basename $$i` || exit 1; \
done \
fi
--- /dev/null
+#
+# 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
+
--- /dev/null
+#
+# 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)
--- /dev/null
+/*
+ * _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);
+}
--- /dev/null
+/*
+ * _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);
+ }
+}
--- /dev/null
+/*
+ * 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);
+}
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; void* __fastcall__ memcpy (void* dest, const void* src, size_t n);
+;
+; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
+;
+
+ .export _memcpy
+ .import _MoveData
+
+_memcpy = _MoveData
--- /dev/null
+;
+; void* __fastcall__ memmove (void* dest, const void* src, size_t n);
+;
+; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
+;
+
+ .export _memmove
+ .import _MoveData
+
+_memmove = _MoveData
--- /dev/null
+;
+; 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
--- /dev/null
+/*
+ * 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);
+ }
+}
--- /dev/null
+/*
+ * 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;
+}
--- /dev/null
+;
+; 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
--- /dev/null
+#
+# 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+# -*- 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)
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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)
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
+
--- /dev/null
+;
+; 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
+
--- /dev/null
+;
+; 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"
+
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
+
+
--- /dev/null
+;
+; 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"
--- /dev/null
+;
+; 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"
+
+
--- /dev/null
+;
+; 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)
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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"
--- /dev/null
+#
+# 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void EnterTurbo (void);
+
+ .export _EnterTurbo
+
+ .include "../inc/jumptab.inc"
+
+_EnterTurbo = EnterTurbo
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void ExitTurbo (void);
+
+ .export _ExitTurbo
+
+ .include "../inc/jumptab.inc"
+
+_ExitTurbo = ExitTurbo
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void PurgeTurbo (void);
+
+ .export _PurgeTurbo
+
+ .include "../inc/jumptab.inc"
+
+_PurgeTurbo = PurgeTurbo
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+#
+# 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)
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+/*
+ * 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 );
+}
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 25.12.99
+
+; char RstrFrmDialogue (void);
+
+ .export _RstrFrmDialogue
+
+ .include "../inc/jumptab.inc"
+
+_RstrFrmDialogue = RstrFrmDialogue
--- /dev/null
+#
+# 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; 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
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char InsertRecord (void);
+
+ .import setoserror
+ .export _InsertRecord
+
+ .include "../inc/jumptab.inc"
+
+_InsertRecord:
+ jsr InsertRecord
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char NextRecord (void);
+
+ .import setoserror
+ .export _NextRecord
+
+ .include "../inc/jumptab.inc"
+
+_NextRecord:
+ jsr NextRecord
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char OpenRecordFile (char *myName);
+
+ .import setoserror
+ .export _OpenRecordFile
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_OpenRecordFile:
+ sta r0L
+ stx r0H
+ jsr OpenRecordFile
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char PointRecord (char recordNum);
+
+ .import setoserror
+ .export _PointRecord
+
+ .include "../inc/jumptab.inc"
+
+_PointRecord:
+ jsr PointRecord
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char PreviousRecord (void);
+
+ .import setoserror
+ .export _PreviousRecord
+
+ .include "../inc/jumptab.inc"
+
+_PreviousRecord:
+ jsr PreviousRecord
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char ReadByte (void);
+
+ .import __oserror
+ .export _ReadByte
+
+ .include "../inc/jumptab.inc"
+
+_ReadByte:
+ jsr ReadByte
+ stx __oserror
+ ldx #0
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char ReadFile (struct tr_se *myTS, char *buffer, int length);
+
+ .export _ReadFile
+ .import popax, setoserror
+ .import gettrse
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_ReadFile:
+ sta r2L
+ stx r2H
+ jsr popax
+ sta r7L
+ stx r7H
+ jsr popax
+ jsr gettrse
+ sta r1L
+ stx r1H
+ jsr ReadFile
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char ReadRecord (char *buffer, int length);
+
+ .export _ReadRecord
+ .import popax, setoserror
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_ReadRecord:
+ sta r2L
+ stx r2H
+ jsr popax
+ sta r7L
+ stx r7H
+ jsr ReadRecord
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char RenameFile (char *old, char *new);
+
+ .export _RenameFile
+ .import popax, setoserror
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_RenameFile:
+ sta r0L
+ stx r0H
+ jsr popax
+ sta r6L
+ stx r6H
+ jsr RenameFile
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char SaveFile (char skip, struct fileheader *myHeader);
+
+ .import setoserror
+ .import popa
+ .export _SaveFile
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_SaveFile:
+ sta r9L
+ stx r9H
+ jsr popa
+ sta r10L
+ jsr SaveFile
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 19.07.2005
+
+; unsigned char __fastcall__ _sysremove (const char* name);
+
+ .export __sysremove
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+__sysremove:
+ sta r0L
+ stx r0H
+ jsr DeleteFile
+ txa
+ ldx #0
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 19.07.2005
+
+; unsigned char __fastcall__ _sysrename (const char* oldname, const char* newname);
+
+ .export __sysrename
+ .import popax
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+__sysrename:
+ sta r0L
+ stx r0H
+ jsr popax
+ sta r6L
+ stx r6H
+ jsr RenameFile
+ txa
+ ldx #0
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char UpdateRecordFile (void);
+
+ .import setoserror
+ .export _UpdateRecordFile
+
+ .include "../inc/jumptab.inc"
+
+_UpdateRecordFile:
+ jsr UpdateRecordFile
+ jmp setoserror
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 25.12.1999, 2.1.2003
+
+; char WriteRecord (char *buffer, int length);
+
+ .export _WriteRecord
+ .import popax, setoserror
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_WriteRecord:
+ sta r2L
+ stx r2H
+ jsr popax
+ sta r7L
+ stx r7H
+ jsr WriteRecord
+ jmp setoserror
--- /dev/null
+#
+# Makefile for GEOS lib
+# for cc65
+#
+#
+
+%.o: %.s
+ @$(AS) -o $@ $(AFLAGS) $<
+
+
+S_OBJS = drawline.o drawpoint.o framerectangle.o hlineregs.o horizontalline.o\
+ imprintrectangle.o invertline.o invertrectangle.o pointregs.o recoverline.o\
+ recoverrectangle.o rectangle.o initdrawwindow.o setpattern.o testpoint.o verticalline.o\
+ put_char.o putdecimal.o putstring.o usesystemfont.o\
+ getcharwidth.o loadcharset.o bitmapup.o bitmapregs.o bitmapclip.o bitotherclip.o\
+ graphicsstring.o getintcharint.o
+
+all: $(S_OBJS)
+
+clean:
+ @$(RM) *.~ $(S_OBJS) core
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void BitmapClip (char skipl, char skipr, int skipy, struct iconpic *myGfx);
+
+ .import popa, popax
+ .import BitmapRegs
+ .export _BitmapClip
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_BitmapClip:
+ jsr BitmapRegs
+ jsr popax
+ sta r12L
+ stx r12H
+ jsr popa
+ sta r11H
+ jsr popa
+ sta r11L
+ jmp BitmapClip
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+ .importzp ptr4
+
+ .export BitmapRegs
+
+ .include "../inc/geossym.inc"
+
+BitmapRegs: ;a/x is a struct iconpic*
+ sta ptr4
+ stx ptr4+1
+ ldy #0
+bmpLp: lda (ptr4),y
+ sta r0L,y
+ iny
+ cpy #6
+ bne bmpLp
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void BitmapUp (struct iconpic *myGfx);
+
+
+ .import BitmapRegs
+ .export _BitmapUp
+
+ .include "../inc/jumptab.inc"
+
+_BitmapUp:
+ jsr BitmapRegs
+ jmp BitmapUp
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void BitOtherClip (void *proc1, void* proc2, char skipl, char skipr, int skipy,
+; struct iconpic *myGfx);
+
+; both proc1, proc2 should be: char __fastcall something (void);
+; proc1 is called before reading a byte (.A returns next data)
+; proc2 is called before reading each byte which is not pattern (code >219)
+
+
+ .import popa, popax
+ .import BitOtherRegs
+ .export _BitOtherClip
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_BitOtherClip:
+ jsr BitOtherRegs
+ jsr popax
+ sta r12L
+ stx r12H
+ jsr popa
+ sta r11H
+ jsr popa
+ sta r11L
+ jsr popax
+ sta r14L
+ stx r14H
+ jsr popax
+ sta r13L
+ stx r13H
+ jmp BitOtherClip
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 29.10.99, 5.03.2003
+
+; void DrawLine (char mode, struct window *mywindow);
+
+ .import _InitDrawWindow
+ .import popa
+ .importzp tmp1
+ .export _DrawLine
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+ .include "../inc/geosmac.ca65.inc"
+
+_DrawLine:
+ tay
+ PushW r2
+ tya
+ jsr _InitDrawWindow
+ MoveW r2, r11
+ PopW r2
+ jsr popa
+ sta tmp1
+ clc
+ bit tmp1
+ bvc @1
+ sec
+@1: jmp DrawLine
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 29.10.99, 05.3.2003
+
+; void DrawPoint (char mode, struct pixel *mypixel);
+
+
+ .import PointRegs
+ .import popa
+ .importzp tmp1
+ .export _DrawPoint
+
+ .include "../inc/jumptab.inc"
+
+_DrawPoint:
+ jsr PointRegs
+ jsr popa
+ sta tmp1
+ clc
+ bit tmp1
+ bvc @1
+ sec
+@1: jmp DrawPoint
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void FrameRectangle (char pattern);
+
+ .export _FrameRectangle
+
+ .include "../inc/jumptab.inc"
+
+_FrameRectangle = FrameRectangle
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 21.12.1999, 2.1.2003
+
+; char GetCharWidth (char character);
+
+ .export _GetCharWidth
+
+ .include "../inc/jumptab.inc"
+
+_GetCharWidth:
+ jsr GetCharWidth
+ ldx #0
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 11.03.2000
+
+ .import popa, popax
+ .export getintcharint
+
+ .include "../inc/geossym.inc"
+
+getintcharint:
+ sta r11L
+ stx r11H
+ jsr popa
+ sta r1H
+ jsr popax
+ sta r0L
+ stx r0H
+ rts
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 25.12.99
+
+; void GraphicsString (char *myString);
+
+ .export _GraphicsString
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_GraphicsString:
+ sta r0L
+ stx r0H
+ jmp GraphicsString
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+
+ .import popax, popa
+
+ .export HLineRegs
+
+ .include "../inc/geossym.inc"
+
+HLineRegs:
+ stx r4H
+ sta r4L
+ jsr popax
+ stx r3H
+ sta r3L
+ jsr popa
+ sta r11L
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void HorizontalLine (char pattern, char y, int xstart, int xend);
+
+ .import popa
+ .import HLineRegs
+
+ .export _HorizontalLine
+
+ .include "../inc/jumptab.inc"
+
+_HorizontalLine:
+ jsr HLineRegs
+ jsr popa
+ jmp HorizontalLine
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void ImprintRectangle (void);
+
+ .export _ImprintRectangle
+
+ .include "../inc/jumptab.inc"
+
+_ImprintRectangle = ImprintRectangle
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+; 11.03.2000
+
+; void InitDrawWindow (struct window *myWindow);
+
+ .importzp ptr4
+
+ .export _InitDrawWindow
+
+ .include "../inc/geossym.inc"
+
+_InitDrawWindow: ;a/x is a struct window*
+ sta ptr4
+ stx ptr4+1
+ ldy #0
+copyWin: lda (ptr4),y
+ sta r2L,y
+ iny
+ cpy #6
+ bne copyWin
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void InvertLine (char y, int xstart, int xend);
+
+ .import HLineRegs
+ .export _InvertLine
+
+ .include "../inc/jumptab.inc"
+
+_InvertLine:
+ jsr HLineRegs
+ jmp InvertLine
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void InvertRectangle (void);
+
+ .export _InvertRectangle
+
+ .include "../inc/jumptab.inc"
+
+_InvertRectangle = InvertRectangle
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void LoadCharSet (struct fontdesc *myFont);
+
+ .export _LoadCharSet
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_LoadCharSet:
+ sta r0L
+ stx r0H
+ jmp LoadCharSet
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+ .importzp ptr4
+
+ .export PointRegs
+
+ .include "../inc/geossym.inc"
+
+PointRegs: ;a/x is a struct pixel*
+ sta ptr4
+ stx ptr4+1
+ ldy #0
+ lda (ptr4),y
+ sta r3L
+ iny
+ lda (ptr4),y
+ sta r3H
+ iny
+ lda (ptr4),y
+ sta r11L
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void PutChar (char character, char y, int x);
+
+ .import popa
+ .export _PutChar
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_PutChar:
+ sta r11L
+ stx r11H
+ jsr popa
+ sta r1H
+ jsr popa
+ jmp PutChar
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.99, 17.8.2003
+
+; void PutDecimal (char style, unsigned value, char y, int x);
+
+ .import popa, popax
+ .import getintcharint
+ .export _PutDecimal
+
+ .include "../inc/jumptab.inc"
+
+_PutDecimal:
+ jsr getintcharint
+ jsr popa
+ jmp PutDecimal
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void PutString (char *mytxt, char y, int x);
+
+ .import popax, popa
+ .import getintcharint
+ .export _PutString
+
+ .include "../inc/jumptab.inc"
+
+_PutString:
+ jsr getintcharint
+ jmp PutString
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void RecoverLine (char y, int xstart, int xend);
+
+ .import HLineRegs
+
+ .export _RecoverLine
+
+ .include "../inc/jumptab.inc"
+
+_RecoverLine:
+ jsr HLineRegs
+ jmp RecoverLine
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void RecoverRectangle (void);
+
+ .export _RecoverRectangle
+
+ .include "../inc/jumptab.inc"
+
+_RecoverRectangle = RecoverRectangle
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void Rectangle (void);
+
+ .export _Rectangle
+
+ .include "../inc/jumptab.inc"
+
+_Rectangle = Rectangle
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void SetPattern (char pattern);
+
+ .export _SetPattern
+
+ .include "../inc/jumptab.inc"
+
+_SetPattern = SetPattern
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 29.10.1999, 2.1.2003
+
+; char TestPoint (struct pixel *mypixel);
+
+ .import PointRegs
+ .import return0, return1
+ .export _TestPoint
+
+ .include "../inc/jumptab.inc"
+
+_TestPoint:
+ jsr PointRegs
+ jsr TestPoint
+ bcc goFalse
+ jmp return1
+goFalse: jmp return0
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void UseSystemFont (void);
+
+ .export _UseSystemFont
+
+ .include "../inc/jumptab.inc"
+
+_UseSystemFont = UseSystemFont
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 29.10.99
+
+; void VerticalLine (char pattern, char ystart, char yend, int x);
+
+ .import popa
+
+ .export _VerticalLine
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_VerticalLine:
+ stx r4H
+ sta r4L
+ jsr popa
+ sta r3H
+ jsr popa
+ sta r3L
+ jsr popa
+ jmp VerticalLine
--- /dev/null
+
+;GeosConst - various system constans sorted by function
+;reassembled by Maciej 'YTM/Elysium' Witkowiak
+;4-2-99, 18-3-99
+
+NULL = 0
+FALSE = NULL
+TRUE = $ff
+
+MOUSE_SPRNUM = 0
+
+DISK_DRV_LGH = $0d80
+
+;
+;filetypes
+; GEOS
+NOT_GEOS = 0
+BASIC = 1
+ASSEMBLY = 2
+DATA = 3
+SYSTEM = 4
+DESK_ACC = 5
+APPLICATION = 6
+APPL_DATA = 7
+FONT = 8
+PRINTER = 9
+INPUT_DEVICE = 10
+DISK_DEVICE = 11
+SYSTEM_BOOT = 12
+TEMPORARY = 13
+AUTO_EXEC = 14
+INPUT_128 = 15
+NUMFILETYPES = 16
+; structure
+SEQUENTIAL = 0
+VLIR = 1
+; DOS
+DEL = 0
+SEQ = 1
+PRG = 2
+USR = 3
+REL = 4
+CBM = 5
+
+;drivetypes
+DRV_NULL = 0
+DRV_1541 = 1
+DRV_1571 = 2
+DRV_1581 = 3
+DRV_NETWORK = 15
+
+;various disk
+REL_FILE_NUM = 9
+CMND_FILE_NUM = 15
+MAX_CMND_STR = 32
+DIR_1581_TRACK = 40
+DIR_ACC_CHAN = 13
+DIR_TRACK = 18
+N_TRACKS = 35
+DK_NM_ID_LEN = 18
+TRACK = 9
+SECTOR = 12
+TOTAL_BLOCKS = 664
+
+;colours
+BLACK = 0
+WHITE = 1
+RED = 2
+CYAN = 3
+PURPLE = 4
+GREEN = 5
+BLUE = 6
+YELLOW = 7
+ORANGE = 8
+BROWN = 9
+LTRED = 10
+DKGREY = 11
+GREY = 12
+MEDGREY = 12
+LTGREEN = 13
+LTBLUE = 14
+LTGREY = 15
+
+;vic memory banks
+GRBANK0 = %11
+GRBANK1 = %10
+GRBANK2 = %01
+GRBANK3 = %00
+
+;screen
+VIC_X_POS_OFF = 24
+VIC_Y_POS_OFF = 50
+SC_BYTE_WIDTH = 40
+SC_PIX_HEIGHT = 200
+SC_PIX_WIDTH = 320
+SC_SIZE = 8000
+;128 screen size constants
+SCREENBYTEWIDTH = 80
+SCREENPIXELWIDTH = 640
+
+
+;control characters
+EOF = 0
+BACKSPACE = 8
+FORWARDSPACE = 9
+TAB = 9
+LF = 10
+HOME = 11
+PAGE_BREAK = 12
+UPLINE = 12
+CR = 13
+ULINEON = 14
+ULINEOFF = 15
+ESC_GRAPHICS = 16
+ESC_RULER = 17
+REV_ON = 18
+REV_OFF = 19
+GOTOX = 20
+GOTOY = 21
+GOTOXY = 22
+NEWCARDSET = 23
+BOLDON = 24
+ITALICON = 25
+OUTLINEON = 26
+PLAINTEXT = 27
+
+;keyboard
+KEY_F1 = 1
+KEY_F2 = 2
+KEY_F3 = 3
+KEY_F4 = 4
+KEY_F5 = 5
+KEY_F6 = 6
+KEY_NOSCRL = 7
+KEY_ENTER = 11
+KEY_F7 = 14
+KEY_F8 = 15
+KEY_UP = 16
+KEY_DOWN = 17
+KEY_HOME = 18
+KEY_CLEAR = 19
+KEY_LARROW = 20
+KEY_UPARROR = 21
+KEY_STOP = 22
+KEY_RUN = 23
+KEY_BPS = 24
+KEY_HELP = 25
+KEY_ALT = 26
+KEY_ESC = 27
+KEY_INSERT = 28
+KEY_DELETE = 29
+KEY_RIGHT = 30
+KEY_INVALID = 31
+KEY_LEFT = BACKSPACE
+
+;DialogBox
+; icons
+OK = 1
+CANCEL = 2
+YES = 3
+NO = 4
+OPEN = 5
+DISK = 6
+; commands
+DBTXTSTR = 11
+DBVARSTR = 12
+DBGETSTRING = 13
+DBSYSOPV = 14
+DBGRPHSTR = 15
+DBGETFILES = 16
+DBOPVEC = 17
+DBUSRICON = 18
+DB_USR_ROUT = 19
+; tabulation in standard window
+DBI_X_0 = 1
+DBI_X_1 = 9
+DBI_X_2 = 17
+DBI_Y_0 = 8
+DBI_Y_1 = 40
+DBI_Y_2 = 72
+; standard window
+SET_DB_POS = 0
+DEF_DB_POS = $80
+DEF_DB_TOP = 32
+DEF_DB_BOT = 127
+DEF_DB_LEFT = 64
+DEF_DB_RIGHT = 255
+; text tabulation
+TXT_LN_1_Y = 16
+TXT_LN_2_Y = 32
+TXT_LN_3_Y = 48
+TXT_LN_4_Y = 64
+TXT_LN_5_Y = 80
+TXT_LN_X = 16
+; ???
+SYSDBI_HEIGHT = 16
+SYSDBI_WIDTH = 6
+
+;GraphicsString - commands
+MOVEPENTO = 1
+LINETO = 2
+RECTANGLETO = 3
+NEWPATTERN = 5
+ESC_PUTSTRING = 6
+FRAME_RECTO = 7
+PEN_X_DELTA = 8
+PEN_Y_DELTA = 9
+PEN_XY_DELTA = 10
+
+
+;DoMenu - menutypes
+MENU_ACTION = $00
+DYN_SUB_MENU = $40
+SUB_MENU = $80
+HORIZONTAL = %00000000
+VERTICAL = %10000000
+
+;Errors
+ANY_FAULT = %11110000
+NO_BLOCKS = 1
+INV_TRACK = 2
+INSUFF_SPACE = 3
+FULL_DIRECTORY = 4
+FILE_NOT_FOUND = 5
+BAD_BAM = 6
+UNOPENED_VLIR = 7
+INV_RECORD = 8
+OUT_OF_RECORDS = 9
+STRUCT_MISMAT = 10
+BFR_OVERFLOW = 11
+CANCEL_ERR = 12
+DEV_NOT_FOUND = 13
+INCOMPATIBLE = 14
+HDR_NOT_THERE = $20
+NO_SYNC = $21
+DBLK_NOT_THERE = $22
+DAT_CHKSUM_ERR = $23
+WR_VER_ERR = $25
+WR_PR_ON = $26
+HDR_CHKSUM_ERR = $27
+DSK_ID_MISMAT = $29
+BYTE_DEC_ERR = $2e
+DOS_MISMATCH = $73
+
+;Offsets
+; ???
+OFF_INDEX_PTR = 1
+; icons
+OFF_NM_ICNS = 0
+OFF_IC_XMOUSE = 1
+OFF_IC_YMOUSE = 3
+OFF_PIC_ICON = 0
+OFF_X_ICON_POS = 2
+OFF_Y_ICON_POS = 3
+OFF_WDTH_ICON = 4
+OFF_HEIGHT_ICON = 5
+OFF_SRV_RT_ICON = 6
+OFF_NX_ICON = 8
+; menu
+OFF_MY_TOP = 0
+OFF_MY_BOT = 1
+OFF_MX_LEFT = 2
+OFF_MX_RIGHT = 4
+OFF_NUM_M_ITEMS = 6
+OFF_1ST_M_ITEM = 7
+; dialog box
+OFF_DB_FORM = 0
+OFF_DB_TOP = 1
+OFF_DB_BOT = 2
+OFF_DB_LEFT = 3
+OFF_DB_RIGHT = 5
+OFF_DB_1STCMD = 7
+; directory
+; disk header
+OFF_TO_BAM = 4
+OFF_DISK_NAME = 144
+OFF_GS_DTYPE = 189
+OFF_OP_TR_SC = 171
+OFF_GS_ID = 173
+; dir entry
+FRST_FILE_ENTRY = 2
+OFF_CFILE_TYPE = 0
+OFF_DE_TR_SC = 1
+OFF_FNAME = 3
+OFF_GHDR_PTR = 19
+OFF_GSTRUC_TYPE = 21
+OFF_GFILE_TYPE = 22
+OFF_YEAR = 23
+OFF_SIZE = 28
+OFF_NXT_FILE = 32
+; file header
+O_GHIC_WIDTH = 2
+O_GHIC_HEIGHT = 3
+O_GHIC_PIC = 4
+O_GHCMDR_TYPE = 68
+O_GHGEOS_TYPE = 69
+O_GHSTR_TYPE = 70
+O_GHST_ADDR = 71
+O_GHEND_ADDR = 73
+O_GHST_VEC = 75
+O_GHFNAME = 77
+O_128_FLAGS = 96
+O_GH_AUTHOR = 97
+O_GHP_DISK = 97
+O_GHP_FNAME = 117
+O_GHINFO_TXT = $a0
+
+; values for CPU_DATA - C64 memory config
+RAM_64K = $30 ;64K RAM
+IO_IN = $35 ;60K RAM, 4K I/O space in
+KRNL_IO_IN = $36 ;kernal and I/O mapped into memory
+KRNL_BAS_IO_IN = $37 ;kernal, I/O and basic mapped into memory
+
+;values for config - C128 mmu
+CIOIN = $7E ;60K RAM, 4K I/O space in
+CRAM64K = $7F ;64K RAM
+CKRNLBASIOIN = $40 ;kernal, I/O and basic ROM's mapped into memory
+CKRNLIOIN = $4E ;Kernal ROM and I/O space mapped in
+
+;values of faultData - pointer position vs. mouseTop/Bottom/Left/Right
+; bit numbers
+OFFTOP_BIT = 7
+OFFBOTTOM_BIT = 6
+OFFLEFT_BIT = 5
+OFFRIGHT_BIT = 4
+OFFMENU_BIT = 3
+; masks
+SET_OFFTOP = %10000000
+SET_OFFBOTTOM = %01000000
+SET_OFFLEFT = %00100000
+SET_OFFRIGHT = %00010000
+SET_OFFMENU = %00001000
+
+;values of currentMode
+; bit numbers
+UNDERLINE_BIT = 7
+BOLD_BIT = 6
+REVERSE_BIT = 5
+ITALIC_BIT = 4
+OUTLINE_BIT = 3
+SUPERSCRIPT_BIT = 2
+SUBSCRIPT_BIT = 1
+; masks
+SET_UNDERLINE = %10000000
+SET_BOLD = %01000000
+SET_REVERSE = %00100000
+SET_ITALIC = %00010000
+SET_OUTLINE = %00001000
+SET_SUPERSCRIPT = %00000100
+SET_SUBSCRIPT = %00000010
+SET_PLAINTEXT = %00000000
+
+;Process control variable
+; bit numbers
+RUNABLE_BIT = 7
+BLOCKED_BIT = 6
+FROZEN_BIT = 5
+NOTIMER_BIT = 4
+; masks
+SET_RUNABLE = %10000000
+SET_BLOCKED = %01000000
+SET_FROZEN = %00100000
+SET_NOTIMER = %00010000
+
+;mouseOn
+; bit numbers
+MOUSEON_BIT = 7
+MENUON_BIT = 6
+ICONSON_BIT = 5
+; masks
+SET_MSE_ON = %10000000
+SET_MENUON = %01000000
+SET_ICONSON = %00100000
+
+;pressFlag
+; bit numbers
+KEYPRESS_BIT = 7
+INPUT_BIT = 6
+MOUSE_BIT = 5
+; masks
+SET_KEYPRESS = %10000000
+SET_INPUTCHG = %01000000
+SET_MOUSE = %00100000
+
+;dispBufferOn
+ST_WRGS_FORE = $20
+ST_WR_BACK = $40
+ST_WR_FORE = $80
+
+;alarmSetFlag
+ALARMMASK = %00000100
+
+;PutDecimal
+ ;leading zeroes
+SET_NOSURPRESS = %00000000
+SET_SURPRESS = %01000000
+ ;justification
+SET_RIGHTJUST = %00000000
+SET_LEFTJUST = %10000000
+
+;icons, menus status flags
+ST_FLASH = $80
+ST_INVERT = $40
+ST_LD_AT_ADDR = $01
+ST_LD_DATA = $80
+ST_PR_DATA = $40
+ST_WR_PR = $40
+
+;???
+ADD1_W = $2000
+DOUBLE_B = $80
+DOUBLE_W = $8000
+
+CLR_SAVE = %01000000
+CONSTRAINED = %01000000
+UN_CONSTRAINED = %00000000
+FG_SAVE = %10000000
+
+FUTURE1 = 7
+FUTURE2 = 8
+FUTURE3 = 9
+FUTURE4 = 10
+USELAST = 127
+SHORTCUT = 128
--- /dev/null
+
+;-------------------------------------------------------------------------
+; OFFSETS INTO SECTSIZETAB (DIO functions)
+;-------------------------------------------------------------------------
+
+sst_flag = 0 ; length 1
+sst_sectsize = 1 ; 2
+sst_driveno = 3 ; 1 (drive #)
+sst_size = 4 ; size of one entry
+ ; if changed, adapt diopncls.s
+
+;-------------------------------------------------------------------------
+; OFFSETS INTO dio_phys_pos
+;-------------------------------------------------------------------------
+
+diopp_head = 0 ; head
+diopp_track = 1 ; track / cylinder
+diopp_sector = 3 ; sector
+diopp_size = 5 ; size of structure
--- /dev/null
+
+;GEOS Disk Driver JumpTab
+;reassembled by Maciej 'YTM/Alliance' Witkowiak
+;4-2-99
+
+;pointers
+_InitForIO = $9000
+_DoneWithIO = $9002
+_ExitTurbo = $9004
+_PurgeTurbo = $9006
+_EnterTurbo = $9008
+_ChangeDiskDevice = $900a
+_NewDisk = $900c
+_ReadBlock = $900e
+_WriteBlock = $9010
+_VerWriteBlock = $9012
+_OpenDisk = $9014
+_GetBlock = $9016
+_PutBlock = $9018
+_GetDirHead = $901a
+_PutDirHead = $901c
+_GetFreeDirBlk = $901e
+_CalcBlksFree = $9020
+_FreeBlock = $9022
+_SetNextFree = $9024
+_FindBAMBit = $9026
+_NxtBlkAlloc = $9028
+_BlkAlloc = $902a
+_ChkDkGEOS = $902c
+_SetGEOSDisk = $902e
+
+;jump table
+Get1stDirEntry = $9030
+GetNxtDirEntry = $9033
+GetBorder = $9036
+AddDirBlock = $9039
+ReadBuff = $903c
+WriteBuff = $903f
+;??? = $9042
+;??? = $9045
+AllocateBlock = $9048
+ReadLink = $904b
--- /dev/null
+
+;GEOS macros
+;reassembled for 6502TASM/MMS by Maciej 'YTM/Elysium' Witkowiak
+;4-2-99
+
+;28-6-99 - ca65 port
+;macro 'sub' renamed to 'ssub' due to 65816 mnemonics
+
+
+ .macro LoadB dest, value
+ lda #value
+ sta dest
+ .endmacro
+
+ .macro LoadW dest, value
+ LoadB dest+1, >(value)
+ LoadB dest+0, <(value)
+ .endmacro
+
+ .macro MoveB source, dest
+ lda source
+ sta dest
+ .endmacro
+
+ .macro MoveW source, dest
+ MoveB source+1, dest+1
+ MoveB source+0, dest+0
+ .endmacro
+
+ .macro add source
+ clc
+ adc source
+ .endmacro
+
+ .macro AddB source, dest
+ lda source
+ add dest
+ sta dest
+ .endmacro
+
+ .macro AddW source, dest
+ AddB source+0, dest+0
+ lda source+1
+ adc dest+1
+ sta dest+1
+ .endmacro
+
+ .macro AddVB value, dest
+ lda dest
+ clc
+ adc #(value)
+ sta dest
+ .endmacro
+
+ .macro AddVW value, dest
+.local Skip
+ AddVB <(value), dest+0
+ .if (>(value))=0
+ bcc Skip
+ inc dest+1
+ .else
+ lda #>(value)
+ adc dest+1
+ sta dest+1
+ .endif
+Skip:
+ .endmacro
+
+ .macro ssub source
+ sec
+ sbc source
+ .endmacro
+
+ .macro SubB source, dest
+ lda dest
+ ssub source
+ sta dest
+ .endmacro
+
+ .macro SubW source, dest
+ SubB source+0, dest+0
+ lda dest+1
+ sbc source+1
+ sta dest+1
+ .endmacro
+
+ .macro SubVW value, dest
+ sec
+ lda dest+0
+ sbc #<(value)
+ sta dest+0
+ lda dest+1
+ sbc #>(value)
+ sta dest+1
+ .endmacro
+
+ .macro CmpB source, dest
+ lda source
+ cmp dest
+ .endmacro
+
+ .macro CmpBI source, immed
+ lda source
+ cmp #(immed)
+ .endmacro
+
+ .macro CmpW source, dest
+.local Skip
+ CmpB source+1, dest+1
+ bne Skip
+ CmpB source+0, dest+0
+Skip:
+ .endmacro
+
+ .macro CmpWI source, immed
+.local Skip
+ CmpBI source+1, >(immed)
+ bne Skip
+ CmpBI source+0, <(immed)
+Skip:
+ .endmacro
+
+ .macro PushB source
+ lda source
+ pha
+ .endmacro
+
+ .macro PushW source
+ PushB source+1
+ PushB source+0
+ .endmacro
+
+ .macro PopB dest
+ pla
+ sta dest
+ .endmacro
+
+ .macro PopW dest
+ PopB dest+0
+ PopB dest+1
+ .endmacro
+
+ .macro bra addr
+ clv
+ bvc addr
+ .endmacro
+
+ .macro smb bitNumber, dest
+ pha
+ lda #(1 << bitNumber)
+ ora dest
+ sta dest
+ pla
+ .endmacro
+
+ .macro smbf bitNumber, dest
+ lda #(1 << bitNumber)
+ ora dest
+ sta dest
+ .endmacro
+
+ .macro rmb bitNumber, dest
+ pha
+ lda #(1 << bitNumber) ^ $ff
+ and dest
+ sta dest
+ pla
+ .endmacro
+
+ .macro rmbf bitNumber, dest
+ lda #(1 << bitNumber) ^ $ff
+ and dest
+ sta dest
+ .endmacro
+
+ .macro bbs bitNumber, source, addr
+.local Skip
+ php
+ pha
+ lda source
+ and #(1 << bitNumber)
+ beq Skip
+ pla
+ plp
+ bra addr
+Skip: pla
+ plp
+ .endmacro
+
+ .macro bbsf bitNumber, source, addr
+ .if bitNumber=7
+ bit source
+ bmi addr
+ .else
+ .if bitNumber=6
+ bit source
+ bvs addr
+ .else
+ lda source
+ and #(1 << bitNumber)
+ bne addr
+ .endif
+ .endif
+ .endmacro
+
+ .macro bbr bitNumber, source, addr
+.local Skip
+ php
+ pha
+ lda source
+ and #(1 << bitNumber)
+ bne Skip
+ pla
+ plp
+ bra addr
+Skip: pla
+ plp
+ .endmacro
+
+ .macro bbrf bitNumber, source, addr
+ .if bitNumber=7
+ bit source
+ bpl addr
+ .else
+ .if bitNumber=6
+ bit source
+ bvc addr
+ .else
+ lda source
+ and #(1 << bitNumber)
+ beq addr
+ .endif
+ .endif
+ .endmacro
+
+;03.03.99 by Maciej Witkowiak
+
+ .macro addv value
+ clc
+ adc #(value)
+ .endmacro
+
+ .macro subv value
+ sec
+ sbc #(value)
+ .endmacro
+
+ .macro bnex addr
+ txa
+ bne addr
+ .endmacro
+
+ .macro beqx addr
+ txa
+ beq addr
+ .endmacro
--- /dev/null
+
+;GEOS variable memory locations sorted by address
+;reassembled by Maciej 'YTM/Elysium' Witkowiak
+;4-2-99
+
+zpage = $0000
+;
+
+CPU_DDR = $00
+CPU_DATA = $01
+;
+r0 = $02
+r0L = $02
+r0H = $03
+r1 = $04
+r1L = $04
+r1H = $05
+r2 = $06
+r2L = $06
+r2H = $07
+r3 = $08
+r3L = $08
+r3H = $09
+r4 = $0a
+r4L = $0a
+r4H = $0b
+r5 = $0c
+r5L = $0c
+r5H = $0d
+r6 = $0e
+r6L = $0e
+r6H = $0f
+r7 = $10
+r7L = $10
+r7H = $11
+r8 = $12
+r8L = $12
+r8H = $13
+r9 = $14
+r9L = $14
+r9H = $15
+r10 = $16
+r10L = $16
+r10H = $17
+r11 = $18
+r11L = $18
+r11H = $19
+r12 = $1a
+r12L = $1a
+r12H = $1b
+r13 = $1c
+r13L = $1c
+r13H = $1d
+r14 = $1e
+r14L = $1e
+r14H = $1f
+r15 = $20
+r15L = $20
+r15H = $21
+;
+a0 = $fb
+a0L = $fb
+a0H = $fc
+a1 = $fd
+a1L = $fd
+a1H = $fe
+a2 = $70
+a2L = $70
+a2H = $71
+a3 = $72
+a3L = $72
+a3H = $73
+a4 = $74
+a4L = $74
+a4H = $75
+a5 = $76
+a5L = $76
+a5H = $77
+a6 = $78
+a6L = $78
+a6H = $79
+a7 = $7a
+a7L = $7a
+a7H = $7b
+a8 = $7c
+a8L = $7c
+a8H = $7d
+a9 = $7e
+a9L = $7e
+a9H = $7f
+
+;
+
+curPattern = $22
+string = $24
+baselineOffset = $26
+curSetWidth = $27
+curHeight = $29
+curIndexTable = $2a
+cardDataPntr = $2c
+currentMode = $2e
+dispBufferOn = $2f
+mouseOn = $30
+msePicPtr = $31
+windowTop = $33
+windowBottom = $34
+leftMargin = $35
+rightMargin = $37
+pressFlag = $39
+mouseXPos = $3a
+mouseYPos = $3c
+returnAddress = $3d
+graphMode = $3f
+TURBO_DD00 = $8e ; from 1541 turbo
+TURBO_DD00_CPY = $8f ; from 1541 turbo
+STATUS = $90
+curDevice = $ba
+;
+irqvec = $0314
+bkvec = $0316
+nmivec = $0318
+;
+APP_RAM = $0400
+BACK_SCR_BASE = $6000
+PRINTBASE = $7900
+OS_VARS = $8000
+;
+diskBlkBuf = $8000
+fileHeader = $8100
+curDirHead = $8200
+fileTrScTab = $8300
+dirEntryBuf = $8400
+DrACurDkNm = $841e
+DrBCurDkNm = $8430
+dataFileName = $8442
+dataDiskName = $8453
+PrntFilename = $8465
+PrntDiskName = $8476
+curDrive = $8489
+diskOpenFlg = $848a
+isGEOS = $848b
+interleave = $848c
+NUMDRV = $848d
+driveType = $848e
+_driveType = driveType-8
+turboFlags = $8492
+_turboFlags = turboFlags-8
+curRecord = $8496
+usedRecords = $8497
+fileWritten = $8498
+fileSize = $8499
+appMain = $849b
+intTopVector = $849d
+intBotVector = $849f
+mouseVector = $84a1
+keyVector = $84a3
+inputVector = $84a5
+mouseFaultVec = $84a7
+otherPressVec = $84a9
+StringFaultVec = $84ab
+alarmTmtVector = $84ad
+BRKVector = $84af
+RecoverVector = $84b1
+selectionFlash = $84b3
+alphaFlag = $84b4
+iconSelFlg = $84b5
+faultData = $84b6
+menuNumber = $84b7
+mouseTop = $84b8
+mouseBottom = $84b9
+mouseLeft = $84ba
+mouseRight = $84bc
+stringX = $84be
+stringY = $84c0
+mousePicData = $84c1
+maxMouseSpeed = $8501
+minMouseSpeed = $8502
+mouseAccel = $8503
+keyData = $8504
+mouseData = $8505
+inputData = $8506
+mouseSpeed = $8507
+random = $850a
+saveFontTab = $850c
+dblClickCount = $8515
+year = $8516
+month = $8517
+day = $8518
+hour = $8519
+minutes = $851a
+seconds = $851b
+alarmSetFlag = $851c
+sysDBData = $851d
+screencolors = $851e
+dlgBoxRamBuf = $851f ; to $8697
+;
+;$8698 - $8877 - various system data (keyboard queue, VLIR t&s, DBox, Menu, timers)
+;
+savedmoby2 = $88bb
+scr80polar = $88bc
+scr80colors = $88bd
+vdcClrMode = $88be
+driveData = $88bf
+ramExpSize = $88c3
+sysRAMFlg = $88c4
+firstBoot = $88c5
+curType = $88c6
+ramBase = $88c7
+inputDevName = $88cb
+memBase = $88cf ;???
+DrCCurDkNm = $88dc
+DrDCurDkNm = $88ee
+dir2Head = $8900
+;
+SPRITE_PICS = $8a00
+spr0pic = $8a00
+spr1pic = $8a40
+spr2pic = $8a80
+spr3pic = $8ac0
+spr4pic = $8b00
+spr5pic = $8b40
+spr6pic = $8b80
+spr7pic = $8bc0
+COLOR_MATRIX = $8c00
+;
+obj0Pointer = $8ff8
+obj1Pointer = $8ff9
+obj2Pointer = $8ffa
+obj3Pointer = $8ffb
+obj4Pointer = $8ffc
+obj5Pointer = $8ffd
+obj6Pointer = $8ffe
+obj7Pointer = $8fff
+;
+DISK_BASE = $9000
+SCREEN_BASE = $a000
+OS_ROM = $c000
+OS_JUMPTAB = $c100
+RAMC_BASE = $de00
+RAMC_WINDOW = $df00
+EXP_BASE = $df00
+MOUSE_BASE_128 = $fd00
+MOUSE_JMP_128 = $fd00
+END_MOUSE_128 = $fe80
+MOUSE_BASE = $fe80
+MOUSE_JMP = $fe80
+config = $ff00
+END_MOUSE = $fffa
+NMI_VECTOR = $fffa
+RESET_VECTOR = $fffc
+IRQ_VECTOR = $fffe
+;
+vicbase = $d000
+sidbase = $d400
+mmu = $d500
+VDC = $d600
+ctab = $d800
+cia1base = $dc00
+cia2base = $dd00
+;
+mob0xpos = $d000
+mob0ypos = $d001
+mob1xpos = $d002
+mob1ypos = $d003
+mob2xpos = $d004
+mob2ypos = $d005
+mob3xpos = $d006
+mob3ypos = $d007
+mob4xpos = $d008
+mob4ypos = $d009
+mob5xpos = $d00a
+mob5ypos = $d00b
+mob6xpos = $d00c
+mob6ypos = $d00d
+mob7xpos = $d00e
+mob7ypos = $d00f
+msbxpos = $d010
+grcntrl1 = $d011
+rasreg = $d012
+lpxpos = $d013
+lpypos = $d014
+mobenble = $d015
+grcntrl2 = $d016
+grmemptr = $d018
+grirq = $d019
+grirqen = $d01a
+moby2 = $d017
+mobprior = $d01b
+mobmcm = $d01c
+mobx2 = $d01d
+mobmobcol = $d01e
+mobbakcol = $d01f
+extclr = $d020
+bakclr0 = $d021
+bakclr1 = $d022
+bakclr2 = $d023
+bakclr3 = $d024
+mcmclr0 = $d025
+mcmclr1 = $d026
+mob0clr = $d027
+mob1clr = $d028
+mob2clr = $d029
+mob3clr = $d02a
+mob4clr = $d02b
+mob5clr = $d02c
+mob6clr = $d02d
+mob7clr = $d02e
+keyreg = $d02f
+clkreg = $d030
+
+;
+vdcreg = $d600
+vdcdata = $d601
+;
--- /dev/null
+
+;GEOS various variables in OS_ROM area
+;reassembled by Maciej 'YTM/Alliance' Witkowiak
+;4-2-99
+
+bootName = $c006
+version = $c00f
+nationality = $c010
+sysFlgCopy = $c012
+c128Flag = $c013
+dateCopy = $c018
\ No newline at end of file
--- /dev/null
+
+;GEOS Input Driver Jump Tab
+;reassembled by Maciej 'YTM/Alliance' Witkowiak
+;4-2-99
+
+;for C64
+;MOUSE_JMP = $fe80
+SlowMouse = $fe83
+UpdateMouse = $fe86
+SetMouse = $fe89
+
+;for C128
+;MOUSE_JMP_128 = $fd00
+SlowMouse_128 = $fd03
+UpdateMouse_128 = $fd06
+SetMouse_128 = $fd09
--- /dev/null
+
+;GEOS System Jump Table
+;reassembled by Maciej 'YTM/Alliance' Witkowiak
+;4-2-99
+
+;jump table
+InterruptMain = $c100
+InitProcesses = $c103
+RestartProcess = $c106
+EnableProcess = $c109
+BlockProcess = $c10c
+UnBlockProcess = $c10f
+FreezeProcess = $c112
+UnFreezeProcess = $c115
+HorizontalLine = $c118
+InvertLine = $c11b
+RecoverLine = $c11e
+VerticalLine = $c121
+Rectangle = $c124
+FrameRectangle = $c127
+InvertRectangle = $c12a
+RecoverRectangle = $c12d
+DrawLine = $c130
+DrawPoint = $c133
+GraphicsString = $c136
+SetPattern = $c139
+GetScanLine = $c13c
+TestPoint = $c13f
+BitmapUp = $c142
+PutChar = $c145
+PutString = $c148
+UseSystemFont = $c14b
+StartMouseMode = $c14e
+DoMenu = $c151
+RecoverMenu = $c154
+RecoverAllMenus = $c157
+DoIcons = $c15a
+DShiftLeft = $c15d
+BBMult = $c160
+BMult = $c163
+DMult = $c166
+Ddiv = $c169
+DSdiv = $c16c
+Dabs = $c16f
+Dnegate = $c172
+Ddec = $c175
+ClearRam = $c178
+FillRam = $c17b
+MoveData = $c17e
+InitRam = $c181
+PutDecimal = $c184
+GetRandom = $c187
+MouseUp = $c18a
+MouseOff = $c18d
+DoPreviousMenu = $c190
+ReDoMenu = $c193
+GetSerialNumber = $c196
+Sleep = $c199
+ClearMouseMode = $c19c
+i_Rectangle = $c19f
+i_FrameRectangle = $c1a2
+i_RecoverRectangle = $c1a5
+i_GraphicsString = $c1a8
+i_BitmapUp = $c1ab
+i_PutString = $c1ae
+GetRealSize = $c1b1
+i_FillRam = $c1b4
+i_MoveData = $c1b7
+GetString = $c1ba
+GotoFirstMenu = $c1bd
+InitTextPrompt = $c1c0
+MainLoop = $c1c3
+DrawSprite = $c1c6
+GetCharWidth = $c1c9
+LoadCharSet = $c1cc
+PosSprite = $c1cf
+EnablSprite = $c1d2
+DisablSprite = $c1d5
+CallRoutine = $c1d8
+CalcBlksFree = $c1db
+ChkDkGEOS = $c1de
+NewDisk = $c1e1
+GetBlock = $c1e4
+PutBlock = $c1e7
+SetGEOSDisk = $c1ea
+SaveFile = $c1ed
+SetGDirEntry = $c1f0
+BldGDirEntry = $c1f3
+GetFreeDirBlk = $c1f6
+WriteFile = $c1f9
+BlkAlloc = $c1fc
+ReadFile = $c1ff
+SmallPutChar = $c202
+FollowChain = $c205
+GetFile = $c208
+FindFile = $c20b
+CRC = $c20e
+LdFile = $c211
+EnterTurbo = $c214
+LdDeskAcc = $c217
+ReadBlock = $c21a
+LdApplic = $c21d
+WriteBlock = $c220
+VerWriteBlock = $c223
+FreeFile = $c226
+GetFHdrInfo = $c229
+EnterDeskTop = $c22c
+StartAppl = $c22f
+ExitTurbo = $c232
+PurgeTurbo = $c235
+DeleteFile = $c238
+FindFTypes = $c23b
+RstrAppl = $c23e
+ToBASIC = $c241
+FastDelFile = $c244
+GetDirHead = $c247
+PutDirHead = $c24a
+NxtBlkAlloc = $c24d
+ImprintRectangle = $c250
+i_ImprintRectangle = $c253
+DoDlgBox = $c256
+RenameFile = $c259
+InitForIO = $c25c
+DoneWithIO = $c25f
+DShiftRight = $c262
+CopyString = $c265
+CopyFString = $c268
+CmpString = $c26b
+CmpFString = $c26e
+FirstInit = $c271
+OpenRecordFile = $c274
+CloseRecordFile = $c277
+NextRecord = $c27a
+PreviousRecord = $c27d
+PointRecord = $c280
+DeleteRecord = $c283
+InsertRecord = $c286
+AppendRecord = $c289
+ReadRecord = $c28c
+WriteRecord = $c28f
+SetNextFree = $c292
+UpdateRecordFile = $c295
+GetPtrCurDkNm = $c298
+PromptOn = $c29b
+PromptOff = $c29e
+OpenDisk = $c2a1
+DoInlineReturn = $c2a4
+GetNextChar = $c2a7
+BitmapClip = $c2aa
+FindBAMBit = $c2ad
+SetDevice = $c2b0
+IsMseInRegion = $c2b3
+ReadByte = $c2b6
+FreeBlock = $c2b9
+ChangeDiskDevice = $c2bc
+RstrFrmDialogue = $c2bf
+Panic = $c2c2
+BitOtherClip = $c2c5
+StashRAM = $c2c8
+FetchRAM = $c2cb
+SwapRAM = $c2ce
+VerifyRAM = $c2d1
+DoRAMOp = $c2d4
+
+;only in GEOS 128
+TempHideMouse = $c2d7
+SetMousePicture = $c2da
+SetNewMode = $c2dd
+NormalizeX = $c2e0
+MoveBData = $c2e3
+SwapBData = $c2e6
+VerifyBData = $c2e9
+DoBOp = $c2ec
+AccessCache = $c2ef
+HideOnlyMouse = $c2f2
+SetColorMode = $c2f5
+ColorCard = $c2f8
+ColorRectangle = $c2fb
--- /dev/null
+
+;GEOS Printer Driver Jump Table
+;reassembled by Maciej 'YTM/Alliance' Witkowiak
+;4-2-99
+
+;jump table
+InitForPrint = $7900
+StartPrint = $7903
+PrintBuffer = $7906
+StopPrint = $7909
+GetDimensions = $790c
+PrinsASCII = $790f
+StartASCII = $7912
+SetNLQ = $7915
--- /dev/null
+#
+# Makefile for GEOS lib
+# for cc65
+#
+#
+
+%.o: %.s
+ @$(AS) -o $@ $(AFLAGS) $<
+
+
+S_OBJS = crc.o doublepop.o reuregs.o clearram.o fillram.o initram.o movedata.o\
+ stashram.o fetchram.o swapram.o verifyram.o\
+ doublespop.o copystring.o cmpstring.o copyfstring.o cmpfstring.o
+
+all: $(S_OBJS)
+
+clean:
+ @$(RM) *.~ $(S_OBJS) core
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.99, 20.08.2003
+
+; void * ClearRam (char *dest, int length);
+
+ .import DoublePop
+ .export _ClearRam
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_ClearRam:
+ jsr DoublePop
+ pha
+ txa
+ pha
+ jsr ClearRam
+ pla
+ tax
+ pla
+ rts
+
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 22.12.99, 29.07.2000
+
+; char CmpFString (char length, char *dest, char* source);
+
+ .import DoubleSPop, SetPtrXY
+ .import popa, return0, return1
+ .export _CmpFString
+
+ .include "../inc/jumptab.inc"
+
+_CmpFString:
+ jsr DoubleSPop
+ jsr popa
+ jsr SetPtrXY
+ jsr CmpFString
+ bne L1
+ jmp return0
+L1: jmp return1
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 22.12.1999, 2.1.2003
+
+; char CmpString (char *dest, char* source);
+
+ .import DoubleSPop
+ .import return0, return1
+ .export _CmpString
+
+ .include "../inc/jumptab.inc"
+
+_CmpString:
+ jsr DoubleSPop
+ jsr CmpString
+ bne L1
+ jmp return0
+L1: jmp return1
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 22.12.99, 29.07.2000
+
+; void CopyFString (char length, char *dest, char* source);
+
+ .import DoubleSPop, SetPtrXY
+ .import popa
+ .export _CopyFString
+
+ .include "../inc/jumptab.inc"
+
+_CopyFString:
+ jsr DoubleSPop
+ jsr popa
+ jsr SetPtrXY
+ jmp CopyFString
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 22.12.99
+
+; void CopyString (char *dest, char* source);
+
+ .import DoubleSPop
+ .export _CopyString
+
+ .include "../inc/jumptab.inc"
+
+_CopyString:
+ jsr DoubleSPop
+ jmp CopyString
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 22.12.99
+
+; int CRC (char *memory, int length);
+
+ .import DoublePop
+ .export _CRC
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_CRC:
+ jsr DoublePop
+ jsr CRC
+ lda r2L
+ ldx r2H
+ rts
+
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 31.12.99
+
+ .import popax
+ .export DoublePop
+
+ .include "../inc/geossym.inc"
+
+DoublePop:
+ sta r0L
+ stx r0H
+ jsr popax
+ sta r1L
+ stx r1H
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 22.12.99, 29.07.2000
+
+ .import popax
+ .importzp ptr3, ptr4
+ .export DoubleSPop
+ .export SetPtrXY
+
+ .include "../inc/geossym.inc"
+
+DoubleSPop:
+ sta ptr4
+ stx ptr4+1
+ jsr popax
+ sta ptr3
+ stx ptr3+1
+; rts
+;
+; SetPtrXY can be sometimes executed twice, but even this way it is few cycles
+; faster...
+
+SetPtrXY:
+ ldx #ptr4
+ ldy #ptr3
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void FetchRAM (char REUBank, int length, char *from, char *dest);
+
+ .import REURegs
+ .export _FetchRAM
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_FetchRAM:
+ jsr REURegs
+ jmp FetchRAM
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.99, 15.07.2001
+
+; void * FillRam (char *dest, char what, int length);
+
+ .import popa, popax
+ .export _FillRam
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_FillRam:
+ sta r0L
+ stx r0H
+ jsr popa
+ sta r2L
+ jsr popax
+ sta r1L
+ stx r1H
+ pha
+ txa
+ pha
+ jsr FillRam
+ pla
+ tax
+ pla
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void InitRam (struct inittab*);
+
+ .export _InitRam
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_InitRam:
+ sta r0L
+ stx r0H
+ jmp InitRam
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.99, 15.07.2001
+
+; void* MoveData (char* dest, char *source, int length);
+
+ .import popax
+ .export _MoveData
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_MoveData:
+ sta r2L
+ stx r2H
+ jsr popax
+ sta r0L
+ stx r0H
+ jsr popax
+ sta r1L
+ stx r1H
+ jsr MoveData
+ lda r1L ; return dest ptr to be compatible with memmove and memcpy
+ ldx r1H
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 31.12.99
+
+ .import popax, popa
+ .import DoublePop
+ .export REURegs
+
+ .include "../inc/geossym.inc"
+
+REURegs:
+ jsr DoublePop
+ jsr popax
+ sta r2L
+ stx r2H
+ jsr popa
+ sta r3L
+ rts
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void StashRAM (char REUBank, int length, char *dest, char *from);
+
+ .import REURegs
+ .export _StashRAM
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_StashRAM:
+ jsr REURegs
+ jmp StashRAM
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void SwapRAM (char REUBank, int length, char *reuaddy, char *cpuaddy);
+; note that in all REU procs last two pointers are identified like here
+
+ .import REURegs
+ .export _SwapRAM
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_SwapRAM:
+ jsr REURegs
+ jmp SwapRAM
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 21.12.1999, 2.1.2003
+
+; char VerifyRAM (char REUBank, int length, char *reuaddy, char *cpuaddy);
+
+ .import REURegs
+ .export _VerifyRAM
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_VerifyRAM:
+ jsr REURegs
+ jsr VerifyRAM
+ txa
+ ldx #0
+ rts
--- /dev/null
+#
+# Makefile for GEOS lib
+# for cc65
+#
+#
+
+%.o: %.s
+ @$(AS) -o $@ $(AFLAGS) $<
+
+
+S_OBJS = domenu.o dopreviousmenu.o redomenu.o recovermenu.o recoverallmenus.o\
+ gotofirstmenu.o doicons.o
+
+all: $(S_OBJS)
+
+clean:
+ @$(RM) *.~ $(S_OBJS) core
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void DoIcons (struct icontab *myicons);
+
+ .export _DoIcons
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_DoIcons:
+ sta r0L
+ stx r0H
+ jmp DoIcons
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void DoMenu (struct menu *mymenu);
+
+ .export _DoMenu
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_DoMenu:
+ sta r0L
+ stx r0H
+ lda #0
+ jmp DoMenu
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void DoPreviousMenu (void);
+
+ .export _DoPreviousMenu
+
+ .include "../inc/jumptab.inc"
+
+_DoPreviousMenu = DoPreviousMenu
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void GotoFirstMenu (void);
+
+ .export _GotoFirstMenu
+
+ .include "../inc/jumptab.inc"
+
+_GotoFirstMenu = GotoFirstMenu
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void RecoverAllMenus (void);
+
+ .export _RecoverAllMenus
+
+ .include "../inc/jumptab.inc"
+
+_RecoverAllMenus = RecoverAllMenus
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void RecoverMenu (void);
+
+ .export _RecoverMenu
+
+ .include "../inc/jumptab.inc"
+
+_RecoverMenu = RecoverMenu
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void ReDoMenu (void);
+
+ .export _ReDoMenu
+
+ .include "../inc/jumptab.inc"
+
+_ReDoMenu = ReDoMenu
\ No newline at end of file
--- /dev/null
+#
+# Makefile for GEOS lib
+# for cc65
+#
+#
+
+%.o: %.s
+ @$(AS) -o $@ $(AFLAGS) $<
+
+
+S_OBJS = startmousemode.o clearmousemode.o mouseup.o mouseoff.o\
+ drawsprite.o possprite.o enablsprite.o disablsprite.o\
+ ismseinregion.o inittextprompt.o promptoff.o prompton.o\
+ getnextchar.o\
+ mouse.o
+
+all: $(S_OBJS)
+
+clean:
+ @$(RM) *.~ $(S_OBJS) core
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void ClearMouseMode (void);
+
+ .export _ClearMouseMode
+
+ .include "../inc/jumptab.inc"
+
+_ClearMouseMode = ClearMouseMode
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void DisablSprite (char spritenum);
+
+ .export _DisablSprite
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_DisablSprite:
+ sta r3L
+ jmp DisablSprite
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+;
+; void DrawSprite (char spritenum, char *tab63 );
+;
+
+ .import popa
+ .export _DrawSprite
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_DrawSprite:
+
+ sta r4L
+ stx r4H
+ jsr popa
+ sta r3L
+ jmp DrawSprite
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void EnablSprite (char spritenum);
+
+ .export _EnablSprite
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_EnablSprite:
+ sta r3L
+ jmp EnablSprite
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 21.12.1999, 2.1.2003
+
+; char GetNextChar (void);
+; note that if it returns 0 (FALSE) then no characters are available
+
+ .export _GetNextChar
+
+ .include "../inc/jumptab.inc"
+
+_GetNextChar:
+ jsr GetNextChar
+ ldx #0
+ tay ; preserve Z flag
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void InitTextPrompt (char height);
+
+ .export _InitTextPrompt
+
+ .include "../inc/jumptab.inc"
+
+_InitTextPrompt = InitTextPrompt
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 21.12.1999, 2.1.2003
+
+; char IsMseInRegion (struct window *mywindow);
+
+ .import _InitDrawWindow
+
+ .export _IsMseInRegion
+
+ .include "../inc/jumptab.inc"
+
+_IsMseInRegion:
+ jsr _InitDrawWindow
+ jsr IsMseInRegion
+ ldx #0
+ rts
--- /dev/null
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 2.7.2001
+;
+; Wrapper for GEOS standard input device interface
+;
+
+ .export _mouse_init, _mouse_done
+ .export _mouse_hide, _mouse_show
+ .export _mouse_box
+ .export _mouse_pos, _mouse_info
+ .export _mouse_move, _mouse_buttons
+
+ .import popsreg, addysp1
+ .importzp sp, sreg, ptr1
+
+ .include "../inc/const.inc"
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+
+.code
+
+; --------------------------------------------------------------------------
+;
+; unsigned char __fastcall__ mouse_init (unsigned char type);
+;
+
+_mouse_init:
+ jsr StartMouseMode
+ jsr MouseOff
+
+ lda #0
+ sta mouseTop
+ sta mouseLeft
+ sta mouseLeft+1
+ lda #199
+ sta mouseBottom
+ lda graphMode
+ bpl _mse_screen320
+
+ lda #<639 ; 80 columns on C128
+ ldx #>639
+ bne _mse_storex
+_mse_screen320:
+ lda #<319 ; 40 columns on C64/C128
+ ldx #>319
+_mse_storex:
+ sta mouseRight
+ stx mouseRight+1
+_mse_initend:
+ lda #0
+ tax
+; --------------------------------------------------------------------------
+;
+; void mouse_done (void);
+;
+_mouse_done:
+ rts
+
+; --------------------------------------------------------------------------
+;
+; void mouse_hide (void);
+;
+
+_mouse_hide = MouseOff
+
+; --------------------------------------------------------------------------
+;
+; void mouse_show (void);
+;
+
+_mouse_show = MouseUp
+
+; --------------------------------------------------------------------------
+;
+; void __fastcall__ mouse_box (int minx, int miny, int maxx, int maxy);
+;
+
+_mouse_box:
+ ldy #0 ; Stack offset
+
+ sta mouseBottom
+
+ lda (sp),y
+ sta mouseRight
+ iny
+ lda (sp),y
+ sta mouseRight+1 ; maxx
+
+ iny
+ lda (sp),y
+ sta mouseTop
+ iny ; Skip high byte
+
+ iny
+ lda (sp),y
+ sta mouseLeft
+ iny
+ lda (sp),y
+ sta mouseLeft+1 ; minx
+
+ jmp addysp1 ; Drop params, return
+
+; --------------------------------------------------------------------------
+;
+; void __fastcall__ mouse_pos (struct mouse_pos* pos);
+; /* Return the current mouse position */
+;
+
+_mouse_pos:
+ sta ptr1
+ stx ptr1+1 ; Remember the argument pointer
+
+ ldy #0 ; Structure offset
+
+ php
+ sei ; Disable interrupts
+
+ lda mouseXPos ; Transfer the position
+ sta (ptr1),y
+ lda mouseXPos+1
+ iny
+ sta (ptr1),y
+ lda mouseYPos
+ iny
+ sta (ptr1),y
+ lda #$00
+ iny
+ sta (ptr1),y
+
+ plp ; Reenable interrupts
+ rts ; Done
+
+; --------------------------------------------------------------------------
+;
+; void __fastcall__ mouse_info (struct mouse_info* info);
+; /* Return the state of the mouse buttons and the position of the mouse */
+;
+
+_mouse_info:
+
+; We're cheating here to keep the code smaller: The first fields of the
+; mouse_info struct are identical to the mouse_pos struct, so we will just
+; call _mouse_pos to initialize the struct pointer and fill the position
+; fields.
+
+ jsr _mouse_pos
+
+; Fill in the button state
+
+ jsr _mouse_buttons ; Will not touch ptr1
+ iny
+ sta (ptr1),y
+
+ rts
+
+; --------------------------------------------------------------------------
+;
+; void __fastcall__ mouse_move (int x, int y);
+;
+
+_mouse_move:
+ jsr popsreg ; Get X
+ php
+ sei ; Disable interrupts
+ sta mouseYPos
+ lda sreg
+ ldx sreg+1
+ sta mouseXPos
+ stx mouseXPos+1
+ plp ; Enable interrupts
+ rts
+
+; --------------------------------------------------------------------------
+;
+; unsigned char mouse_buttons (void);
+;
+
+_mouse_buttons:
+ ldx #0
+ lda pressFlag
+ and #SET_MOUSE
+ lsr
+ rts
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void MouseOff (void);
+
+ .export _MouseOff
+
+ .include "../inc/jumptab.inc"
+
+_MouseOff = MouseOff
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void MouseUp (void);
+
+ .export _MouseUp
+
+ .include "../inc/jumptab.inc"
+
+_MouseUp = MouseUp
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+;
+; void PosSprite (char spritenum, struct pixel *position );
+;
+
+ .importzp ptr4
+ .import popa
+ .export _PosSprite
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_PosSprite:
+ sta ptr4
+ stx ptr4+1
+ ldy #0
+ lda (ptr4),y
+ sta r4L
+ iny
+ lda (ptr4),y
+ sta r4H
+ iny
+ lda (ptr4),y
+ sta r5L
+ jsr popa
+ sta r3L
+ jmp PosSprite
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void PromptOff (void);
+
+ .export _PromptOff
+
+ .include "../inc/jumptab.inc"
+
+_PromptOff = PromptOff
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void PromptOn (struct pixel *);
+
+ .importzp ptr4
+ .export _PromptOn
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_PromptOn:
+ sta ptr4
+ stx ptr4+1
+ ldy #0
+promptLp: lda (ptr4),y
+ sta stringX,y
+ iny
+ cpy #3
+ bne promptLp
+ jmp PromptOn
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void StartMouseMode (void);
+
+ .export _StartMouseMode
+
+ .include "../inc/jumptab.inc"
+
+_StartMouseMode:
+ clc
+ jmp StartMouseMode
\ No newline at end of file
--- /dev/null
+#
+# Makefile for GEOS lib
+# for cc65
+#
+#
+
+%.o: %.s
+ @$(AS) -o $@ $(AFLAGS) $<
+
+
+S_OBJS = processinitrestartenable.o processblock.o processfreeze.o processsleep.o
+
+all: $(S_OBJS)
+
+clean:
+ @$(RM) *.~ $(S_OBJS) core
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 27.10.99
+
+;
+; void InitProcesses (char number, struct process* proctab);
+; (rest)
+; void BlockProcess (char number);
+; void UnBlockProcess (char number);
+;
+
+ .export _BlockProcess
+ .export _UnBlockProcess
+
+ .include "../inc/jumptab.inc"
+
+_BlockProcess:
+ tax
+ jmp BlockProcess
+
+_UnBlockProcess:
+ tax
+ jmp UnBlockProcess
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 27.10.99
+
+;
+; void FreezeProcess (char number);
+; void UnFreezeProcess (char number);
+;
+
+ .export _FreezeProcess
+ .export _UnFreezeProcess
+
+ .include "../inc/jumptab.inc"
+
+_FreezeProcess:
+ tax
+ jmp FreezeProcess
+
+_UnFreezeProcess:
+ tax
+ jmp UnFreezeProcess
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 27.10.99
+
+;
+; void InitProcesses (char number, struct process* proctab);
+; void RestartProcess (char number);
+; void EnableProcess (char number);
+;
+
+ .import popa
+ .export _InitProcesses
+ .export _RestartProcess
+ .export _EnableProcess
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_InitProcesses:
+
+ sta r0L
+ stx r0H
+ jsr popa
+ jmp InitProcesses
+
+_RestartProcess:
+ tax
+ jmp RestartProcess
+
+_EnableProcess:
+ tax
+ jmp EnableProcess
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.99, 15.8.2003
+
+;
+; void Sleep (int jiffies);
+;
+
+ .export _Sleep
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+ .importzp ptr1
+ .importzp tmp1
+
+_SleepExit:
+ jsr Sleep ; call Sleep
+ ldx tmp1
+ txs ; restore stack pointer
+ jmp (ptr1) ; when timeouts control will reach here
+
+_Sleep:
+ sta r0L ; store data
+ stx r0H
+ pla
+ sta ptr1
+ pla
+ sta ptr1+1 ; preserve return address
+ inc ptr1
+ bne @L0
+ inc ptr1+1 ; fix return address
+@L0: tsx
+ stx tmp1 ; preserve stack pointer
+ jsr _SleepExit ; call Sleep
+ jmp MainLoop ; immediate return here - go to idle loop
--- /dev/null
+#
+# Makefile for GEOS lib
+# for cc65
+#
+
+%.o: %.c
+ @$(CC) $(CFLAGS) $<
+ @$(AS) -g -o $@ $(AFLAGS) $(*).s
+
+%.o: %.s
+ @$(AS) -o $@ $(AFLAGS) $<
+
+C_OBJS =
+S_OBJS = call.o
+
+all: $(C_OBJS) $(S_OBJS)
+
+clean:
+ @$(RM) core *.~ $(S_OBJS) $(C_OBJS:.o=.s) $(C_OBJS)
--- /dev/null
+;
+; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
+; 23.12.2002
+;
+; CC65 runtime: call function via pointer in ax
+;
+
+ .include "../inc/jumptab.inc"
+
+ .export callax
+
+callax = CallRoutine
--- /dev/null
+#
+# Makefile for GEOS lib
+# for cc65
+#
+#
+
+%.o: %.s
+ @$(AS) -o $@ $(AFLAGS) $<
+
+%.o: %.c
+ @$(CC) $(CFLAGS) $<
+ @$(AS) -g -o $@ $(AFLAGS) $(*).s
+
+S_OBJS = ctype.o \
+ callroutine.o \
+ enterdesktop.o \
+ firstinit.o \
+ get_ostype.o \
+ getrandom.o \
+ getserialnumber.o \
+ initdoneio.o \
+ mainloop.o \
+ panic.o \
+ tobasic.o \
+ setdevice.o \
+ sysuname.o
+
+C_OBJS = systime.o
+
+all: $(C_OBJS) $(S_OBJS)
+
+clean:
+ @$(RM) *.~ $(C_OBJS:.o=.s) $(C_OBJS) $(S_OBJS) core
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void CallRoutine (myRoutine);
+
+ .export _CallRoutine
+
+ .include "../inc/jumptab.inc"
+
+_CallRoutine = CallRoutine
\ No newline at end of file
--- /dev/null
+;
+; Ullrich von Bassewitz, 02.06.1998
+; Maciej Witkowiak, 06.04.2002
+;
+; Character specification table.
+;
+
+; The tables are readonly, put them into the rodata segment
+
+.rodata
+
+; Value that must be added to a lower case char to make it an upper case
+; char (example: for ASCII, this must be $E0).
+
+
+ .export __cdiff
+
+__cdiff:
+ .byte $e0
+
+
+; The following 256 byte wide table specifies attributes for the isxxx type
+; of functions. Doing it by a table means some overhead in space, but it
+; has major advantages:
+;
+; * It is fast. If it were'nt for the slow parameter passing of cc65, one
+; could even define macros for the isxxx functions (this is usually
+; done on other platforms).
+;
+; * It is highly portable. The only unportable part is the table itself,
+; all real code goes into the common library.
+;
+; * We save some code in the isxxx functions.
+;
+;
+; Bit assignments:
+;
+; 0 - Lower case char
+; 1 - Upper case char
+; 2 - Numeric digit
+; 3 - Hex digit (both, lower and upper)
+; 4 - Control character
+; 5 - The space character itself
+; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
+; 7 - Space or tab character
+
+
+; The table is taken from Craig S. Bruce technical docs for the ACE os
+
+ .export __ctype
+
+__ctype:
+ .byte $10 ; 0/00 ___rvs_@___
+ .byte $10 ; 1/01 ___rvs_a___
+ .byte $10 ; 2/02 ___rvs_b___
+ .byte $10 ; 3/03 ___rvs_c___
+ .byte $10 ; 4/04 ___rvs_d___
+ .byte $10 ; 5/05 ___rvs_e___
+ .byte $10 ; 6/06 ___rvs_f___
+ .byte $10 ; 7/07 _BEL/rvs_g_
+ .byte $10 ; 8/08 ___rvs_h___
+ .byte $D0 ; 9/09 _TAB/rvs_i_
+ .byte $50 ; 10/0a _BOL/rvs_j_
+ .byte $10 ; 11/0b ___rvs_k___
+ .byte $10 ; 12/0c ___rvs_l___
+ .byte $50 ; 13/0d _CR_/rvs_m_
+ .byte $10 ; 14/0e ___rvs_n___
+ .byte $10 ; 15/0f ___rvs_o___
+ .byte $10 ; 16/10 ___rvs_p___
+ .byte $50 ; 17/11 _VT_/rvs_q_
+ .byte $10 ; 18/12 ___rvs_r___
+ .byte $10 ; 19/13 ___rvs_s___
+ .byte $50 ; 20/14 _BS_/rvs_t_
+ .byte $10 ; 21/15 ___rvs_u___
+ .byte $10 ; 22/16 ___rvs_v___
+ .byte $10 ; 23/17 ___rvs_w___
+ .byte $10 ; 24/18 ___rvs_x___
+ .byte $10 ; 25/19 ___rvs_y___
+ .byte $10 ; 26/1a ___rvs_z___
+ .byte $10 ; 27/1b ___rvs_[___
+ .byte $10 ; 28/1c ___rvs_\___
+ .byte $10 ; 29/1d ___rvs_]___
+ .byte $10 ; 30/1e ___rvs_^___
+ .byte $10 ; 31/1f _rvs_under_
+ .byte $A0 ; 32/20 ___SPACE___
+ .byte $00 ; 33/21 _____!_____
+ .byte $00 ; 34/22 _____"_____
+ .byte $00 ; 35/23 _____#_____
+ .byte $00 ; 36/24 _____$_____
+ .byte $00 ; 37/25 _____%_____
+ .byte $00 ; 38/26 _____&_____
+ .byte $00 ; 39/27 _____'_____
+ .byte $00 ; 40/28 _____(_____
+ .byte $00 ; 41/29 _____)_____
+ .byte $00 ; 42/2a _____*_____
+ .byte $00 ; 43/2b _____+_____
+ .byte $00 ; 44/2c _____,_____
+ .byte $00 ; 45/2d _____-_____
+ .byte $00 ; 46/2e _____._____
+ .byte $00 ; 47/2f _____/_____
+ .byte $0C ; 48/30 _____0_____
+ .byte $0C ; 49/31 _____1_____
+ .byte $0C ; 50/32 _____2_____
+ .byte $0C ; 51/33 _____3_____
+ .byte $0C ; 52/34 _____4_____
+ .byte $0C ; 53/35 _____5_____
+ .byte $0C ; 54/36 _____6_____
+ .byte $0C ; 55/37 _____7_____
+ .byte $0C ; 56/38 _____8_____
+ .byte $0C ; 57/39 _____9_____
+ .byte $00 ; 58/3a _____:_____
+ .byte $00 ; 59/3b _____;_____
+ .byte $00 ; 60/3c _____<_____
+ .byte $00 ; 61/3d _____=_____
+ .byte $00 ; 62/3e _____>_____
+ .byte $00 ; 63/3f _____?_____
+
+ .byte $00 ; 64/40 _____@_____
+ .byte $09 ; 65/41 _____a_____
+ .byte $09 ; 66/42 _____b_____
+ .byte $09 ; 67/43 _____c_____
+ .byte $09 ; 68/44 _____d_____
+ .byte $09 ; 69/45 _____e_____
+ .byte $09 ; 70/46 _____f_____
+ .byte $01 ; 71/47 _____g_____
+ .byte $01 ; 72/48 _____h_____
+ .byte $01 ; 73/49 _____i_____
+ .byte $01 ; 74/4a _____j_____
+ .byte $01 ; 75/4b _____k_____
+ .byte $01 ; 76/4c _____l_____
+ .byte $01 ; 77/4d _____m_____
+ .byte $01 ; 78/4e _____n_____
+ .byte $01 ; 79/4f _____o_____
+ .byte $01 ; 80/50 _____p_____
+ .byte $01 ; 81/51 _____q_____
+ .byte $01 ; 82/52 _____r_____
+ .byte $01 ; 83/53 _____s_____
+ .byte $01 ; 84/54 _____t_____
+ .byte $01 ; 85/55 _____u_____
+ .byte $01 ; 86/56 _____v_____
+ .byte $01 ; 87/57 _____w_____
+ .byte $01 ; 88/58 _____x_____
+ .byte $01 ; 89/59 _____y_____
+ .byte $01 ; 90/5a _____z_____
+ .byte $00 ; 91/5b _____[_____
+ .byte $00 ; 92/5c _____\_____
+ .byte $00 ; 93/5d _____]_____
+ .byte $00 ; 94/5e _____^_____
+ .byte $00 ; 95/5f _UNDERLINE_
+
+ .byte $00 ; 96/60 _A`_grave__
+ .byte $0a ; 97/61 _A'_acute__
+ .byte $0a ; 98/62 _A^_circum_
+ .byte $0a ; 99/63 _A~_tilde__
+ .byte $0a ; 100/64 _A"_dieres_
+ .byte $0a ; 101/65 _A__ring___
+ .byte $0a ; 102/66 _AE________
+ .byte $02 ; 103/67 _C,cedilla_
+ .byte $02 ; 104/68 _E`_grave__
+ .byte $02 ; 105/69 _E'_acute__
+ .byte $02 ; 106/6a _E^_circum_
+ .byte $02 ; 107/6b _E"_dieres_
+ .byte $02 ; 108/6c _I`_grave__
+ .byte $02 ; 109/6d _I'_acute__
+ .byte $02 ; 110/6e _I^_circum_
+ .byte $02 ; 111/6f _I"_dieres_
+ .byte $02 ; 112/70 _D-_Eth_lr_
+ .byte $02 ; 113/71 _N~_tilde__
+ .byte $02 ; 114/72 _O`_grave__
+ .byte $02 ; 115/73 _O'_acute__
+ .byte $02 ; 116/74 _O^_circum_
+ .byte $02 ; 117/75 _O~_tilde__
+ .byte $02 ; 118/76 _O"_dieres_
+ .byte $02 ; 119/77 __multiply_
+ .byte $02 ; 120/78 _O/_slash__
+ .byte $02 ; 121/79 _U`_grave__
+ .byte $02 ; 122/7a _U'_acute__
+ .byte $00 ; 123/7b _U^_circum_
+ .byte $00 ; 124/7c _U"_dieres_
+ .byte $00 ; 125/7d _Y'_acute__
+ .byte $00 ; 126/7e _cap_thorn_
+ .byte $00 ; 127/7f _Es-sed_B__
+
+ .byte $00 ; 128/80 __bullet___
+ .byte $00 ; 129/81 __v_line___
+ .byte $00 ; 130/82 __h_line___
+ .byte $00 ; 131/83 ___cross___
+ .byte $00 ; 132/84 _tl_corner_
+ .byte $00 ; 133/85 _tr_corner_
+ .byte $00 ; 134/86 _bl_corner_
+ .byte $00 ; 135/87 _br_corner_
+ .byte $00 ; 136/88 ___l_tee___
+ .byte $00 ; 137/89 ___r_tee___
+ .byte $00 ; 138/8a ___t_tee___
+ .byte $00 ; 139/8b ___b_tee___
+ .byte $00 ; 140/8c ___heart___
+ .byte $00 ; 141/8d __diamond__
+ .byte $00 ; 142/8e ___club____
+ .byte $00 ; 143/8f ___spade___
+ .byte $00 ; 144/90 _s_circle__
+ .byte $00 ; 145/91 __circle___
+ .byte $00 ; 146/92 ___pound___
+ .byte $00 ; 147/93 _CLS/check_
+ .byte $00 ; 148/94 ____pi_____
+ .byte $00 ; 149/95 ____+/-____
+ .byte $00 ; 150/96 __divide___
+ .byte $00 ; 151/97 __degree___
+ .byte $00 ; 152/98 _c_checker_
+ .byte $00 ; 153/99 _f_checker_
+ .byte $00 ; 154/9a _solid_sq__
+ .byte $00 ; 155/9b __cr_char__
+ .byte $00 ; 156/9c _up_arrow__
+ .byte $00 ; 157/9d _down_arro_
+ .byte $00 ; 158/9e _left_arro_
+ .byte $00 ; 159/9f _right_arr_
+ .byte $00 ; 160/a0 _req space_
+ .byte $00 ; 161/a1 _!_invertd_
+ .byte $00 ; 162/a2 ___cent____
+ .byte $00 ; 163/a3 ___pound___
+ .byte $00 ; 164/a4 __currency_
+ .byte $00 ; 165/a5 ____yen____
+ .byte $00 ; 166/a6 _|_broken__
+ .byte $00 ; 167/a7 __section__
+ .byte $00 ; 168/a8 __umulaut__
+ .byte $00 ; 169/a9 _copyright_
+ .byte $00 ; 170/aa __fem_ord__
+ .byte $00 ; 171/ab _l_ang_quo_
+ .byte $00 ; 172/ac ____not____
+ .byte $00 ; 173/ad _syl_hyphn_
+ .byte $00 ; 174/ae _registerd_
+ .byte $00 ; 175/af _overline__
+ .byte $00 ; 176/b0 __degrees__
+ .byte $00 ; 177/b1 ____+/-____
+ .byte $00 ; 178/b2 _2_supersc_
+ .byte $00 ; 179/b3 _3_supersc_
+ .byte $00 ; 180/b4 ___acute___
+ .byte $00 ; 181/b5 ____mu_____
+ .byte $00 ; 182/b6 _paragraph_
+ .byte $00 ; 183/b7 __mid_dot__
+ .byte $00 ; 184/b8 __cedilla__
+ .byte $00 ; 185/b9 _1_supersc_
+ .byte $00 ; 186/ba __mas_ord__
+ .byte $00 ; 187/bb _r_ang_quo_
+ .byte $00 ; 188/bc ____1/4____
+ .byte $00 ; 189/bd ____1/2____
+ .byte $00 ; 190/be ____3/4____
+ .byte $00 ; 191/bf _?_invertd_
+
+ .byte $00 ; 192/c0 _____`_____
+ .byte $00 ; 193/c1 _____A_____
+ .byte $00 ; 194/c2 _____B_____
+ .byte $00 ; 195/c3 _____C_____
+ .byte $00 ; 196/c4 _____D_____
+ .byte $00 ; 197/c5 _____E_____
+ .byte $00 ; 198/c6 _____F_____
+ .byte $00 ; 199/c7 _____G_____
+ .byte $00 ; 200/c8 _____H_____
+ .byte $00 ; 201/c9 _____I_____
+ .byte $00 ; 202/ca _____J_____
+ .byte $00 ; 203/cb _____K_____
+ .byte $00 ; 204/cc _____L_____
+ .byte $00 ; 205/cd _____M_____
+ .byte $00 ; 206/ce _____N_____
+ .byte $00 ; 207/cf _____O_____
+ .byte $00 ; 208/d0 _____P_____
+ .byte $00 ; 209/d1 _____Q_____
+ .byte $00 ; 210/d2 _____R_____
+ .byte $00 ; 211/d3 _____S_____
+ .byte $00 ; 212/d4 _____T_____
+ .byte $00 ; 213/d5 _____U_____
+ .byte $00 ; 214/d6 _____V_____
+ .byte $00 ; 215/d7 _____W_____
+ .byte $00 ; 216/d8 _____X_____
+ .byte $00 ; 217/d9 _____Y_____
+ .byte $00 ; 218/da _____Z_____
+ .byte $00 ; 219/db _____{_____
+ .byte $00 ; 220/dc _____|_____
+ .byte $00 ; 221/dd _____}_____
+ .byte $00 ; 222/de _____~_____
+ .byte $00 ; 223/df ___HOUSE___
+ .byte $00 ; 224/e0 _a`_grave__
+ .byte $00 ; 225/e1 _a'_acute__
+ .byte $00 ; 226/e2 _a^_circum_
+ .byte $00 ; 227/e3 _a~_tilde__
+ .byte $00 ; 228/e4 _a"_dieres_
+ .byte $00 ; 229/e5 _a__ring___
+ .byte $00 ; 230/e6 _ae________
+ .byte $00 ; 231/e7 _c,cedilla_
+ .byte $00 ; 232/e8 _e`_grave__
+ .byte $00 ; 233/e9 _e'_acute__
+ .byte $00 ; 234/ea _e^_circum_
+ .byte $00 ; 235/eb _e"_dieres_
+ .byte $00 ; 236/ec _i`_grave__
+ .byte $00 ; 237/ed _i'_acute__
+ .byte $00 ; 238/ee _i^_circum_
+ .byte $00 ; 239/ef _i"_dieres_
+ .byte $00 ; 240/f0 _o^x_Eth_s_
+ .byte $00 ; 241/f1 _n~_tilda__
+ .byte $00 ; 242/f2 _o`_grave__
+ .byte $00 ; 243/f3 _o'_acute__
+ .byte $00 ; 244/f4 _o^_circum_
+ .byte $00 ; 245/f5 _o~_tilde__
+ .byte $00 ; 246/f6 _o"_dieres_
+ .byte $00 ; 247/f7 __divide___
+ .byte $00 ; 248/f8 _o/_slash__
+ .byte $00 ; 249/f9 _u`_grave__
+ .byte $00 ; 250/fa _u'_acute__
+ .byte $00 ; 251/fb _u^_circum_
+ .byte $00 ; 252/fc _u"_dieres_
+ .byte $00 ; 253/fd _y'_acute__
+ .byte $00 ; 254/fe _sm_thorn__
+ .byte $00 ; 255/ff _y"_dieres_
+
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.99, 17.04.2003
+
+; void EnterDeskTop (void);
+
+ .import _exit
+ .export _EnterDeskTop
+
+_EnterDeskTop:
+ lda #0
+ tax
+ jmp _exit
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void FirstInit (void);
+
+ .export _FirstInit
+
+ .include "../inc/jumptab.inc"
+
+_FirstInit = FirstInit
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 10.09.2001
+;
+; Plus4 and GEOS 1.1 detection by
+; Marco van den Heuvel, 2010-02-02
+;
+
+; unsigned char get_ostype (void);
+; unsigned char get_tv (void);
+
+ .export _get_ostype
+ .export _get_tv
+ .importzp tmp1
+
+ .include "../inc/const.inc"
+ .include "../inc/geossym.inc"
+ .include "../inc/geossym2.inc"
+
+_get_ostype:
+ ldx #0
+ lda version
+ cmp #$a9
+ beq geos11
+ and #%11110000
+ cmp #$10
+ beq geos10
+ lda c128Flag ; we're on at least 2.0
+ cmp #$18
+ beq geos_on_plus4
+ ora version
+ rts
+geos10:
+ lda version
+ rts
+geos11:
+ lda #$11
+ rts
+geos_on_plus4:
+ lda #$04
+ rts
+
+_get_tv:
+ jsr _get_ostype
+ cmp #$04
+ beq plus4_get_tv
+ bpl only40 ; C64 with 40 columns only
+ lda graphMode
+ bpl only40 ; C128 but currently on 40 columns
+ ldx #1 ; COLUMNS80
+ bne tvmode
+only40: ldx #0 ; COLUMNS40
+tvmode: ; PAL/NTSC check here, result in A
+ php
+ sei ; disable interrupts
+ lda CPU_DATA ; this is for C64
+ pha
+ lda #IO_IN ; enable access to I/O
+ sta CPU_DATA
+ bit rasreg
+ bpl tvmode ; wait for rasterline 127<x<256
+ lda #24 ; (rasterline now >=256!)
+modelp:
+ cmp rasreg ; wait for rasterline = 24 (or 280 on PAL)
+ bne modelp
+ lda grcntrl1 ; 24 or 280 ?
+ bpl ntsc
+ lda #0 ; PAL
+ beq modeend
+ntsc:
+ lda #$80 ; NTSC
+
+modeend:
+ stx tmp1
+ ora tmp1
+ sta tmp1
+ ldx #0
+ pla
+ sta CPU_DATA ; restore memory config
+ plp ; restore interrupt state
+ lda tmp1
+ rts
+plus4_get_tv:
+ ldx #1 ; Assume PAL
+ bit $FF07 ; Test bit 6
+ bvc plus4pal
+ dex ; NTSC
+plus4pal:
+ txa
+ ldx #0
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.1999, 2.1.2003
+
+; char GetRandom (void);
+
+ .export _GetRandom
+
+ .include "../inc/jumptab.inc"
+
+_GetRandom:
+ jsr GetRandom
+ ldx #0
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; int GetSerialNumber (void);
+
+ .export _GetSerialNumber
+
+ .include "../inc/jumptab.inc"
+ .include "../inc/geossym.inc"
+
+_GetSerialNumber:
+
+ jsr GetSerialNumber
+ lda r0L
+ ldx r0H
+ rts
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void InitForIO (void);
+; void DoneWithIO (void);
+
+ .export _InitForIO, _DoneWithIO
+
+ .include "../inc/jumptab.inc"
+
+_InitForIO = InitForIO
+
+_DoneWithIO = DoneWithIO
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Elysium' Witkowiak
+;
+; 30.10.1999, 10.01.2003
+
+; void MainLoop (void);
+
+ .export _MainLoop
+
+ .include "../inc/jumptab.inc"
+
+_MainLoop = MainLoop
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void Panic (void);
+
+ .export _Panic
+
+ .include "../inc/jumptab.inc"
+
+_Panic = Panic
\ No newline at end of file
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 21.12.99
+
+; void SetDevice (char newDeviceNumber);
+
+ .export _SetDevice
+
+ .include "../inc/jumptab.inc"
+
+_SetDevice = SetDevice
--- /dev/null
+
+/*
+ * systime.c
+ *
+ * Maciej 'YTM/Elysium' Witkowiak, 22.11.2002
+ */
+
+#include <time.h>
+#include <geos.h>
+
+time_t _systime(void) {
+
+struct tm currentTime;
+
+ currentTime.tm_sec = system_date.s_seconds;
+ currentTime.tm_min = system_date.s_minutes;
+ currentTime.tm_hour = system_date.s_hour;
+ currentTime.tm_mday = system_date.s_day;
+ currentTime.tm_mon = system_date.s_month;
+ currentTime.tm_year = system_date.s_year;
+ if (system_date.s_year < 87) {
+ currentTime.tm_year+=100;
+ }
+ currentTime.tm_isdst = -1;
+
+ return mktime(¤tTime);
+
+}
+
+clock_t clock(void) {
+
+ return _systime();
+
+}
--- /dev/null
+;
+; Ullrich von Bassewitz, 2003-08-12
+;
+; unsigned char __fastcall__ _sysuname (struct utsname* buf);
+;
+
+ .export __sysuname, utsdata
+
+ .import utscopy
+
+ __sysuname = utscopy
+
+;--------------------------------------------------------------------------
+; Data. We define a fixed utsname struct here and just copy it.
+
+.rodata
+
+utsdata:
+ ; sysname
+ .asciiz "cc65"
+
+ ; nodename
+ .asciiz ""
+
+ ; release
+ .byte ((.VERSION >> 8) & $0F) + '0'
+ .byte '.'
+ .byte ((.VERSION >> 4) & $0F) + '0'
+ .byte $00
+
+ ; version
+ .byte (.VERSION & $0F) + '0'
+ .byte $00
+
+ ; machine
+ .asciiz "GEOS"
+
+
+
--- /dev/null
+
+;
+; Maciej 'YTM/Alliance' Witkowiak
+;
+; 30.10.99
+
+; void ToBASIC (void);
+
+ .export _ToBASIC
+
+ .include "../inc/jumptab.inc"
+
+_ToBASIC = ToBASIC
\ No newline at end of file
+++ /dev/null
-#
-# 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.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
-
+++ /dev/null
-#
-# 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)
+++ /dev/null
-/*
- * _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);
-}
+++ /dev/null
-/*
- * _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);
- }
-}
+++ /dev/null
-/*
- * 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);
-}
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; void* __fastcall__ memcpy (void* dest, const void* src, size_t n);
-;
-; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
-;
-
- .export _memcpy
- .import _MoveData
-
-_memcpy = _MoveData
+++ /dev/null
-;
-; void* __fastcall__ memmove (void* dest, const void* src, size_t n);
-;
-; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
-;
-
- .export _memmove
- .import _MoveData
-
-_memmove = _MoveData
+++ /dev/null
-;
-; 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
+++ /dev/null
-/*
- * 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);
- }
-}
+++ /dev/null
-/*
- * 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;
-}
+++ /dev/null
-;
-; 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
+++ /dev/null
-#
-# 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-# -*- 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)
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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)
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
-
+++ /dev/null
-;
-; 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
-
+++ /dev/null
-;
-; 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"
-
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
-
-
+++ /dev/null
-;
-; 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"
+++ /dev/null
-;
-; 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"
-
-
+++ /dev/null
-;
-; 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)
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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"
+++ /dev/null
-#
-# 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-;
-; 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
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void EnterTurbo (void);
-
- .export _EnterTurbo
-
- .include "../inc/jumptab.inc"
-
-_EnterTurbo = EnterTurbo
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void ExitTurbo (void);
-
- .export _ExitTurbo
-
- .include "../inc/jumptab.inc"
-
-_ExitTurbo = ExitTurbo
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void PurgeTurbo (void);
-
- .export _PurgeTurbo
-
- .include "../inc/jumptab.inc"
-
-_PurgeTurbo = PurgeTurbo
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-#
-# 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)
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-/*
- * 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 );
-}
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 25.12.99
-
-; char RstrFrmDialogue (void);
-
- .export _RstrFrmDialogue
-
- .include "../inc/jumptab.inc"
-
-_RstrFrmDialogue = RstrFrmDialogue
+++ /dev/null
-#
-# 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; 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
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char InsertRecord (void);
-
- .import setoserror
- .export _InsertRecord
-
- .include "../inc/jumptab.inc"
-
-_InsertRecord:
- jsr InsertRecord
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char NextRecord (void);
-
- .import setoserror
- .export _NextRecord
-
- .include "../inc/jumptab.inc"
-
-_NextRecord:
- jsr NextRecord
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char OpenRecordFile (char *myName);
-
- .import setoserror
- .export _OpenRecordFile
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_OpenRecordFile:
- sta r0L
- stx r0H
- jsr OpenRecordFile
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char PointRecord (char recordNum);
-
- .import setoserror
- .export _PointRecord
-
- .include "../inc/jumptab.inc"
-
-_PointRecord:
- jsr PointRecord
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char PreviousRecord (void);
-
- .import setoserror
- .export _PreviousRecord
-
- .include "../inc/jumptab.inc"
-
-_PreviousRecord:
- jsr PreviousRecord
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char ReadByte (void);
-
- .import __oserror
- .export _ReadByte
-
- .include "../inc/jumptab.inc"
-
-_ReadByte:
- jsr ReadByte
- stx __oserror
- ldx #0
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char ReadFile (struct tr_se *myTS, char *buffer, int length);
-
- .export _ReadFile
- .import popax, setoserror
- .import gettrse
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_ReadFile:
- sta r2L
- stx r2H
- jsr popax
- sta r7L
- stx r7H
- jsr popax
- jsr gettrse
- sta r1L
- stx r1H
- jsr ReadFile
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char ReadRecord (char *buffer, int length);
-
- .export _ReadRecord
- .import popax, setoserror
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_ReadRecord:
- sta r2L
- stx r2H
- jsr popax
- sta r7L
- stx r7H
- jsr ReadRecord
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char RenameFile (char *old, char *new);
-
- .export _RenameFile
- .import popax, setoserror
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_RenameFile:
- sta r0L
- stx r0H
- jsr popax
- sta r6L
- stx r6H
- jsr RenameFile
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char SaveFile (char skip, struct fileheader *myHeader);
-
- .import setoserror
- .import popa
- .export _SaveFile
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_SaveFile:
- sta r9L
- stx r9H
- jsr popa
- sta r10L
- jsr SaveFile
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 19.07.2005
-
-; unsigned char __fastcall__ _sysremove (const char* name);
-
- .export __sysremove
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-__sysremove:
- sta r0L
- stx r0H
- jsr DeleteFile
- txa
- ldx #0
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 19.07.2005
-
-; unsigned char __fastcall__ _sysrename (const char* oldname, const char* newname);
-
- .export __sysrename
- .import popax
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-__sysrename:
- sta r0L
- stx r0H
- jsr popax
- sta r6L
- stx r6H
- jsr RenameFile
- txa
- ldx #0
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char UpdateRecordFile (void);
-
- .import setoserror
- .export _UpdateRecordFile
-
- .include "../inc/jumptab.inc"
-
-_UpdateRecordFile:
- jsr UpdateRecordFile
- jmp setoserror
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char WriteRecord (char *buffer, int length);
-
- .export _WriteRecord
- .import popax, setoserror
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_WriteRecord:
- sta r2L
- stx r2H
- jsr popax
- sta r7L
- stx r7H
- jsr WriteRecord
- jmp setoserror
+++ /dev/null
-#
-# Makefile for GEOS lib
-# for cc65
-#
-#
-
-%.o: %.s
- @$(AS) -o $@ $(AFLAGS) $<
-
-
-S_OBJS = drawline.o drawpoint.o framerectangle.o hlineregs.o horizontalline.o\
- imprintrectangle.o invertline.o invertrectangle.o pointregs.o recoverline.o\
- recoverrectangle.o rectangle.o initdrawwindow.o setpattern.o testpoint.o verticalline.o\
- put_char.o putdecimal.o putstring.o usesystemfont.o\
- getcharwidth.o loadcharset.o bitmapup.o bitmapregs.o bitmapclip.o bitotherclip.o\
- graphicsstring.o getintcharint.o
-
-all: $(S_OBJS)
-
-clean:
- @$(RM) *.~ $(S_OBJS) core
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void BitmapClip (char skipl, char skipr, int skipy, struct iconpic *myGfx);
-
- .import popa, popax
- .import BitmapRegs
- .export _BitmapClip
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_BitmapClip:
- jsr BitmapRegs
- jsr popax
- sta r12L
- stx r12H
- jsr popa
- sta r11H
- jsr popa
- sta r11L
- jmp BitmapClip
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
- .importzp ptr4
-
- .export BitmapRegs
-
- .include "../inc/geossym.inc"
-
-BitmapRegs: ;a/x is a struct iconpic*
- sta ptr4
- stx ptr4+1
- ldy #0
-bmpLp: lda (ptr4),y
- sta r0L,y
- iny
- cpy #6
- bne bmpLp
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void BitmapUp (struct iconpic *myGfx);
-
-
- .import BitmapRegs
- .export _BitmapUp
-
- .include "../inc/jumptab.inc"
-
-_BitmapUp:
- jsr BitmapRegs
- jmp BitmapUp
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void BitOtherClip (void *proc1, void* proc2, char skipl, char skipr, int skipy,
-; struct iconpic *myGfx);
-
-; both proc1, proc2 should be: char __fastcall something (void);
-; proc1 is called before reading a byte (.A returns next data)
-; proc2 is called before reading each byte which is not pattern (code >219)
-
-
- .import popa, popax
- .import BitOtherRegs
- .export _BitOtherClip
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_BitOtherClip:
- jsr BitOtherRegs
- jsr popax
- sta r12L
- stx r12H
- jsr popa
- sta r11H
- jsr popa
- sta r11L
- jsr popax
- sta r14L
- stx r14H
- jsr popax
- sta r13L
- stx r13H
- jmp BitOtherClip
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 29.10.99, 5.03.2003
-
-; void DrawLine (char mode, struct window *mywindow);
-
- .import _InitDrawWindow
- .import popa
- .importzp tmp1
- .export _DrawLine
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
- .include "../inc/geosmac.ca65.inc"
-
-_DrawLine:
- tay
- PushW r2
- tya
- jsr _InitDrawWindow
- MoveW r2, r11
- PopW r2
- jsr popa
- sta tmp1
- clc
- bit tmp1
- bvc @1
- sec
-@1: jmp DrawLine
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 29.10.99, 05.3.2003
-
-; void DrawPoint (char mode, struct pixel *mypixel);
-
-
- .import PointRegs
- .import popa
- .importzp tmp1
- .export _DrawPoint
-
- .include "../inc/jumptab.inc"
-
-_DrawPoint:
- jsr PointRegs
- jsr popa
- sta tmp1
- clc
- bit tmp1
- bvc @1
- sec
-@1: jmp DrawPoint
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void FrameRectangle (char pattern);
-
- .export _FrameRectangle
-
- .include "../inc/jumptab.inc"
-
-_FrameRectangle = FrameRectangle
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char GetCharWidth (char character);
-
- .export _GetCharWidth
-
- .include "../inc/jumptab.inc"
-
-_GetCharWidth:
- jsr GetCharWidth
- ldx #0
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 11.03.2000
-
- .import popa, popax
- .export getintcharint
-
- .include "../inc/geossym.inc"
-
-getintcharint:
- sta r11L
- stx r11H
- jsr popa
- sta r1H
- jsr popax
- sta r0L
- stx r0H
- rts
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 25.12.99
-
-; void GraphicsString (char *myString);
-
- .export _GraphicsString
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_GraphicsString:
- sta r0L
- stx r0H
- jmp GraphicsString
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-
- .import popax, popa
-
- .export HLineRegs
-
- .include "../inc/geossym.inc"
-
-HLineRegs:
- stx r4H
- sta r4L
- jsr popax
- stx r3H
- sta r3L
- jsr popa
- sta r11L
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void HorizontalLine (char pattern, char y, int xstart, int xend);
-
- .import popa
- .import HLineRegs
-
- .export _HorizontalLine
-
- .include "../inc/jumptab.inc"
-
-_HorizontalLine:
- jsr HLineRegs
- jsr popa
- jmp HorizontalLine
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void ImprintRectangle (void);
-
- .export _ImprintRectangle
-
- .include "../inc/jumptab.inc"
-
-_ImprintRectangle = ImprintRectangle
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-; 11.03.2000
-
-; void InitDrawWindow (struct window *myWindow);
-
- .importzp ptr4
-
- .export _InitDrawWindow
-
- .include "../inc/geossym.inc"
-
-_InitDrawWindow: ;a/x is a struct window*
- sta ptr4
- stx ptr4+1
- ldy #0
-copyWin: lda (ptr4),y
- sta r2L,y
- iny
- cpy #6
- bne copyWin
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void InvertLine (char y, int xstart, int xend);
-
- .import HLineRegs
- .export _InvertLine
-
- .include "../inc/jumptab.inc"
-
-_InvertLine:
- jsr HLineRegs
- jmp InvertLine
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void InvertRectangle (void);
-
- .export _InvertRectangle
-
- .include "../inc/jumptab.inc"
-
-_InvertRectangle = InvertRectangle
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void LoadCharSet (struct fontdesc *myFont);
-
- .export _LoadCharSet
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_LoadCharSet:
- sta r0L
- stx r0H
- jmp LoadCharSet
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
- .importzp ptr4
-
- .export PointRegs
-
- .include "../inc/geossym.inc"
-
-PointRegs: ;a/x is a struct pixel*
- sta ptr4
- stx ptr4+1
- ldy #0
- lda (ptr4),y
- sta r3L
- iny
- lda (ptr4),y
- sta r3H
- iny
- lda (ptr4),y
- sta r11L
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void PutChar (char character, char y, int x);
-
- .import popa
- .export _PutChar
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_PutChar:
- sta r11L
- stx r11H
- jsr popa
- sta r1H
- jsr popa
- jmp PutChar
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 17.8.2003
-
-; void PutDecimal (char style, unsigned value, char y, int x);
-
- .import popa, popax
- .import getintcharint
- .export _PutDecimal
-
- .include "../inc/jumptab.inc"
-
-_PutDecimal:
- jsr getintcharint
- jsr popa
- jmp PutDecimal
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void PutString (char *mytxt, char y, int x);
-
- .import popax, popa
- .import getintcharint
- .export _PutString
-
- .include "../inc/jumptab.inc"
-
-_PutString:
- jsr getintcharint
- jmp PutString
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void RecoverLine (char y, int xstart, int xend);
-
- .import HLineRegs
-
- .export _RecoverLine
-
- .include "../inc/jumptab.inc"
-
-_RecoverLine:
- jsr HLineRegs
- jmp RecoverLine
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void RecoverRectangle (void);
-
- .export _RecoverRectangle
-
- .include "../inc/jumptab.inc"
-
-_RecoverRectangle = RecoverRectangle
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void Rectangle (void);
-
- .export _Rectangle
-
- .include "../inc/jumptab.inc"
-
-_Rectangle = Rectangle
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void SetPattern (char pattern);
-
- .export _SetPattern
-
- .include "../inc/jumptab.inc"
-
-_SetPattern = SetPattern
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 29.10.1999, 2.1.2003
-
-; char TestPoint (struct pixel *mypixel);
-
- .import PointRegs
- .import return0, return1
- .export _TestPoint
-
- .include "../inc/jumptab.inc"
-
-_TestPoint:
- jsr PointRegs
- jsr TestPoint
- bcc goFalse
- jmp return1
-goFalse: jmp return0
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void UseSystemFont (void);
-
- .export _UseSystemFont
-
- .include "../inc/jumptab.inc"
-
-_UseSystemFont = UseSystemFont
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void VerticalLine (char pattern, char ystart, char yend, int x);
-
- .import popa
-
- .export _VerticalLine
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_VerticalLine:
- stx r4H
- sta r4L
- jsr popa
- sta r3H
- jsr popa
- sta r3L
- jsr popa
- jmp VerticalLine
+++ /dev/null
-
-;GeosConst - various system constans sorted by function
-;reassembled by Maciej 'YTM/Elysium' Witkowiak
-;4-2-99, 18-3-99
-
-NULL = 0
-FALSE = NULL
-TRUE = $ff
-
-MOUSE_SPRNUM = 0
-
-DISK_DRV_LGH = $0d80
-
-;
-;filetypes
-; GEOS
-NOT_GEOS = 0
-BASIC = 1
-ASSEMBLY = 2
-DATA = 3
-SYSTEM = 4
-DESK_ACC = 5
-APPLICATION = 6
-APPL_DATA = 7
-FONT = 8
-PRINTER = 9
-INPUT_DEVICE = 10
-DISK_DEVICE = 11
-SYSTEM_BOOT = 12
-TEMPORARY = 13
-AUTO_EXEC = 14
-INPUT_128 = 15
-NUMFILETYPES = 16
-; structure
-SEQUENTIAL = 0
-VLIR = 1
-; DOS
-DEL = 0
-SEQ = 1
-PRG = 2
-USR = 3
-REL = 4
-CBM = 5
-
-;drivetypes
-DRV_NULL = 0
-DRV_1541 = 1
-DRV_1571 = 2
-DRV_1581 = 3
-DRV_NETWORK = 15
-
-;various disk
-REL_FILE_NUM = 9
-CMND_FILE_NUM = 15
-MAX_CMND_STR = 32
-DIR_1581_TRACK = 40
-DIR_ACC_CHAN = 13
-DIR_TRACK = 18
-N_TRACKS = 35
-DK_NM_ID_LEN = 18
-TRACK = 9
-SECTOR = 12
-TOTAL_BLOCKS = 664
-
-;colours
-BLACK = 0
-WHITE = 1
-RED = 2
-CYAN = 3
-PURPLE = 4
-GREEN = 5
-BLUE = 6
-YELLOW = 7
-ORANGE = 8
-BROWN = 9
-LTRED = 10
-DKGREY = 11
-GREY = 12
-MEDGREY = 12
-LTGREEN = 13
-LTBLUE = 14
-LTGREY = 15
-
-;vic memory banks
-GRBANK0 = %11
-GRBANK1 = %10
-GRBANK2 = %01
-GRBANK3 = %00
-
-;screen
-VIC_X_POS_OFF = 24
-VIC_Y_POS_OFF = 50
-SC_BYTE_WIDTH = 40
-SC_PIX_HEIGHT = 200
-SC_PIX_WIDTH = 320
-SC_SIZE = 8000
-;128 screen size constants
-SCREENBYTEWIDTH = 80
-SCREENPIXELWIDTH = 640
-
-
-;control characters
-EOF = 0
-BACKSPACE = 8
-FORWARDSPACE = 9
-TAB = 9
-LF = 10
-HOME = 11
-PAGE_BREAK = 12
-UPLINE = 12
-CR = 13
-ULINEON = 14
-ULINEOFF = 15
-ESC_GRAPHICS = 16
-ESC_RULER = 17
-REV_ON = 18
-REV_OFF = 19
-GOTOX = 20
-GOTOY = 21
-GOTOXY = 22
-NEWCARDSET = 23
-BOLDON = 24
-ITALICON = 25
-OUTLINEON = 26
-PLAINTEXT = 27
-
-;keyboard
-KEY_F1 = 1
-KEY_F2 = 2
-KEY_F3 = 3
-KEY_F4 = 4
-KEY_F5 = 5
-KEY_F6 = 6
-KEY_NOSCRL = 7
-KEY_ENTER = 11
-KEY_F7 = 14
-KEY_F8 = 15
-KEY_UP = 16
-KEY_DOWN = 17
-KEY_HOME = 18
-KEY_CLEAR = 19
-KEY_LARROW = 20
-KEY_UPARROR = 21
-KEY_STOP = 22
-KEY_RUN = 23
-KEY_BPS = 24
-KEY_HELP = 25
-KEY_ALT = 26
-KEY_ESC = 27
-KEY_INSERT = 28
-KEY_DELETE = 29
-KEY_RIGHT = 30
-KEY_INVALID = 31
-KEY_LEFT = BACKSPACE
-
-;DialogBox
-; icons
-OK = 1
-CANCEL = 2
-YES = 3
-NO = 4
-OPEN = 5
-DISK = 6
-; commands
-DBTXTSTR = 11
-DBVARSTR = 12
-DBGETSTRING = 13
-DBSYSOPV = 14
-DBGRPHSTR = 15
-DBGETFILES = 16
-DBOPVEC = 17
-DBUSRICON = 18
-DB_USR_ROUT = 19
-; tabulation in standard window
-DBI_X_0 = 1
-DBI_X_1 = 9
-DBI_X_2 = 17
-DBI_Y_0 = 8
-DBI_Y_1 = 40
-DBI_Y_2 = 72
-; standard window
-SET_DB_POS = 0
-DEF_DB_POS = $80
-DEF_DB_TOP = 32
-DEF_DB_BOT = 127
-DEF_DB_LEFT = 64
-DEF_DB_RIGHT = 255
-; text tabulation
-TXT_LN_1_Y = 16
-TXT_LN_2_Y = 32
-TXT_LN_3_Y = 48
-TXT_LN_4_Y = 64
-TXT_LN_5_Y = 80
-TXT_LN_X = 16
-; ???
-SYSDBI_HEIGHT = 16
-SYSDBI_WIDTH = 6
-
-;GraphicsString - commands
-MOVEPENTO = 1
-LINETO = 2
-RECTANGLETO = 3
-NEWPATTERN = 5
-ESC_PUTSTRING = 6
-FRAME_RECTO = 7
-PEN_X_DELTA = 8
-PEN_Y_DELTA = 9
-PEN_XY_DELTA = 10
-
-
-;DoMenu - menutypes
-MENU_ACTION = $00
-DYN_SUB_MENU = $40
-SUB_MENU = $80
-HORIZONTAL = %00000000
-VERTICAL = %10000000
-
-;Errors
-ANY_FAULT = %11110000
-NO_BLOCKS = 1
-INV_TRACK = 2
-INSUFF_SPACE = 3
-FULL_DIRECTORY = 4
-FILE_NOT_FOUND = 5
-BAD_BAM = 6
-UNOPENED_VLIR = 7
-INV_RECORD = 8
-OUT_OF_RECORDS = 9
-STRUCT_MISMAT = 10
-BFR_OVERFLOW = 11
-CANCEL_ERR = 12
-DEV_NOT_FOUND = 13
-INCOMPATIBLE = 14
-HDR_NOT_THERE = $20
-NO_SYNC = $21
-DBLK_NOT_THERE = $22
-DAT_CHKSUM_ERR = $23
-WR_VER_ERR = $25
-WR_PR_ON = $26
-HDR_CHKSUM_ERR = $27
-DSK_ID_MISMAT = $29
-BYTE_DEC_ERR = $2e
-DOS_MISMATCH = $73
-
-;Offsets
-; ???
-OFF_INDEX_PTR = 1
-; icons
-OFF_NM_ICNS = 0
-OFF_IC_XMOUSE = 1
-OFF_IC_YMOUSE = 3
-OFF_PIC_ICON = 0
-OFF_X_ICON_POS = 2
-OFF_Y_ICON_POS = 3
-OFF_WDTH_ICON = 4
-OFF_HEIGHT_ICON = 5
-OFF_SRV_RT_ICON = 6
-OFF_NX_ICON = 8
-; menu
-OFF_MY_TOP = 0
-OFF_MY_BOT = 1
-OFF_MX_LEFT = 2
-OFF_MX_RIGHT = 4
-OFF_NUM_M_ITEMS = 6
-OFF_1ST_M_ITEM = 7
-; dialog box
-OFF_DB_FORM = 0
-OFF_DB_TOP = 1
-OFF_DB_BOT = 2
-OFF_DB_LEFT = 3
-OFF_DB_RIGHT = 5
-OFF_DB_1STCMD = 7
-; directory
-; disk header
-OFF_TO_BAM = 4
-OFF_DISK_NAME = 144
-OFF_GS_DTYPE = 189
-OFF_OP_TR_SC = 171
-OFF_GS_ID = 173
-; dir entry
-FRST_FILE_ENTRY = 2
-OFF_CFILE_TYPE = 0
-OFF_DE_TR_SC = 1
-OFF_FNAME = 3
-OFF_GHDR_PTR = 19
-OFF_GSTRUC_TYPE = 21
-OFF_GFILE_TYPE = 22
-OFF_YEAR = 23
-OFF_SIZE = 28
-OFF_NXT_FILE = 32
-; file header
-O_GHIC_WIDTH = 2
-O_GHIC_HEIGHT = 3
-O_GHIC_PIC = 4
-O_GHCMDR_TYPE = 68
-O_GHGEOS_TYPE = 69
-O_GHSTR_TYPE = 70
-O_GHST_ADDR = 71
-O_GHEND_ADDR = 73
-O_GHST_VEC = 75
-O_GHFNAME = 77
-O_128_FLAGS = 96
-O_GH_AUTHOR = 97
-O_GHP_DISK = 97
-O_GHP_FNAME = 117
-O_GHINFO_TXT = $a0
-
-; values for CPU_DATA - C64 memory config
-RAM_64K = $30 ;64K RAM
-IO_IN = $35 ;60K RAM, 4K I/O space in
-KRNL_IO_IN = $36 ;kernal and I/O mapped into memory
-KRNL_BAS_IO_IN = $37 ;kernal, I/O and basic mapped into memory
-
-;values for config - C128 mmu
-CIOIN = $7E ;60K RAM, 4K I/O space in
-CRAM64K = $7F ;64K RAM
-CKRNLBASIOIN = $40 ;kernal, I/O and basic ROM's mapped into memory
-CKRNLIOIN = $4E ;Kernal ROM and I/O space mapped in
-
-;values of faultData - pointer position vs. mouseTop/Bottom/Left/Right
-; bit numbers
-OFFTOP_BIT = 7
-OFFBOTTOM_BIT = 6
-OFFLEFT_BIT = 5
-OFFRIGHT_BIT = 4
-OFFMENU_BIT = 3
-; masks
-SET_OFFTOP = %10000000
-SET_OFFBOTTOM = %01000000
-SET_OFFLEFT = %00100000
-SET_OFFRIGHT = %00010000
-SET_OFFMENU = %00001000
-
-;values of currentMode
-; bit numbers
-UNDERLINE_BIT = 7
-BOLD_BIT = 6
-REVERSE_BIT = 5
-ITALIC_BIT = 4
-OUTLINE_BIT = 3
-SUPERSCRIPT_BIT = 2
-SUBSCRIPT_BIT = 1
-; masks
-SET_UNDERLINE = %10000000
-SET_BOLD = %01000000
-SET_REVERSE = %00100000
-SET_ITALIC = %00010000
-SET_OUTLINE = %00001000
-SET_SUPERSCRIPT = %00000100
-SET_SUBSCRIPT = %00000010
-SET_PLAINTEXT = %00000000
-
-;Process control variable
-; bit numbers
-RUNABLE_BIT = 7
-BLOCKED_BIT = 6
-FROZEN_BIT = 5
-NOTIMER_BIT = 4
-; masks
-SET_RUNABLE = %10000000
-SET_BLOCKED = %01000000
-SET_FROZEN = %00100000
-SET_NOTIMER = %00010000
-
-;mouseOn
-; bit numbers
-MOUSEON_BIT = 7
-MENUON_BIT = 6
-ICONSON_BIT = 5
-; masks
-SET_MSE_ON = %10000000
-SET_MENUON = %01000000
-SET_ICONSON = %00100000
-
-;pressFlag
-; bit numbers
-KEYPRESS_BIT = 7
-INPUT_BIT = 6
-MOUSE_BIT = 5
-; masks
-SET_KEYPRESS = %10000000
-SET_INPUTCHG = %01000000
-SET_MOUSE = %00100000
-
-;dispBufferOn
-ST_WRGS_FORE = $20
-ST_WR_BACK = $40
-ST_WR_FORE = $80
-
-;alarmSetFlag
-ALARMMASK = %00000100
-
-;PutDecimal
- ;leading zeroes
-SET_NOSURPRESS = %00000000
-SET_SURPRESS = %01000000
- ;justification
-SET_RIGHTJUST = %00000000
-SET_LEFTJUST = %10000000
-
-;icons, menus status flags
-ST_FLASH = $80
-ST_INVERT = $40
-ST_LD_AT_ADDR = $01
-ST_LD_DATA = $80
-ST_PR_DATA = $40
-ST_WR_PR = $40
-
-;???
-ADD1_W = $2000
-DOUBLE_B = $80
-DOUBLE_W = $8000
-
-CLR_SAVE = %01000000
-CONSTRAINED = %01000000
-UN_CONSTRAINED = %00000000
-FG_SAVE = %10000000
-
-FUTURE1 = 7
-FUTURE2 = 8
-FUTURE3 = 9
-FUTURE4 = 10
-USELAST = 127
-SHORTCUT = 128
+++ /dev/null
-
-;-------------------------------------------------------------------------
-; OFFSETS INTO SECTSIZETAB (DIO functions)
-;-------------------------------------------------------------------------
-
-sst_flag = 0 ; length 1
-sst_sectsize = 1 ; 2
-sst_driveno = 3 ; 1 (drive #)
-sst_size = 4 ; size of one entry
- ; if changed, adapt diopncls.s
-
-;-------------------------------------------------------------------------
-; OFFSETS INTO dio_phys_pos
-;-------------------------------------------------------------------------
-
-diopp_head = 0 ; head
-diopp_track = 1 ; track / cylinder
-diopp_sector = 3 ; sector
-diopp_size = 5 ; size of structure
+++ /dev/null
-
-;GEOS Disk Driver JumpTab
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;pointers
-_InitForIO = $9000
-_DoneWithIO = $9002
-_ExitTurbo = $9004
-_PurgeTurbo = $9006
-_EnterTurbo = $9008
-_ChangeDiskDevice = $900a
-_NewDisk = $900c
-_ReadBlock = $900e
-_WriteBlock = $9010
-_VerWriteBlock = $9012
-_OpenDisk = $9014
-_GetBlock = $9016
-_PutBlock = $9018
-_GetDirHead = $901a
-_PutDirHead = $901c
-_GetFreeDirBlk = $901e
-_CalcBlksFree = $9020
-_FreeBlock = $9022
-_SetNextFree = $9024
-_FindBAMBit = $9026
-_NxtBlkAlloc = $9028
-_BlkAlloc = $902a
-_ChkDkGEOS = $902c
-_SetGEOSDisk = $902e
-
-;jump table
-Get1stDirEntry = $9030
-GetNxtDirEntry = $9033
-GetBorder = $9036
-AddDirBlock = $9039
-ReadBuff = $903c
-WriteBuff = $903f
-;??? = $9042
-;??? = $9045
-AllocateBlock = $9048
-ReadLink = $904b
+++ /dev/null
-
-;GEOS macros
-;reassembled for 6502TASM/MMS by Maciej 'YTM/Elysium' Witkowiak
-;4-2-99
-
-;28-6-99 - ca65 port
-;macro 'sub' renamed to 'ssub' due to 65816 mnemonics
-
-
- .macro LoadB dest, value
- lda #value
- sta dest
- .endmacro
-
- .macro LoadW dest, value
- LoadB dest+1, >(value)
- LoadB dest+0, <(value)
- .endmacro
-
- .macro MoveB source, dest
- lda source
- sta dest
- .endmacro
-
- .macro MoveW source, dest
- MoveB source+1, dest+1
- MoveB source+0, dest+0
- .endmacro
-
- .macro add source
- clc
- adc source
- .endmacro
-
- .macro AddB source, dest
- lda source
- add dest
- sta dest
- .endmacro
-
- .macro AddW source, dest
- AddB source+0, dest+0
- lda source+1
- adc dest+1
- sta dest+1
- .endmacro
-
- .macro AddVB value, dest
- lda dest
- clc
- adc #(value)
- sta dest
- .endmacro
-
- .macro AddVW value, dest
-.local Skip
- AddVB <(value), dest+0
- .if (>(value))=0
- bcc Skip
- inc dest+1
- .else
- lda #>(value)
- adc dest+1
- sta dest+1
- .endif
-Skip:
- .endmacro
-
- .macro ssub source
- sec
- sbc source
- .endmacro
-
- .macro SubB source, dest
- lda dest
- ssub source
- sta dest
- .endmacro
-
- .macro SubW source, dest
- SubB source+0, dest+0
- lda dest+1
- sbc source+1
- sta dest+1
- .endmacro
-
- .macro SubVW value, dest
- sec
- lda dest+0
- sbc #<(value)
- sta dest+0
- lda dest+1
- sbc #>(value)
- sta dest+1
- .endmacro
-
- .macro CmpB source, dest
- lda source
- cmp dest
- .endmacro
-
- .macro CmpBI source, immed
- lda source
- cmp #(immed)
- .endmacro
-
- .macro CmpW source, dest
-.local Skip
- CmpB source+1, dest+1
- bne Skip
- CmpB source+0, dest+0
-Skip:
- .endmacro
-
- .macro CmpWI source, immed
-.local Skip
- CmpBI source+1, >(immed)
- bne Skip
- CmpBI source+0, <(immed)
-Skip:
- .endmacro
-
- .macro PushB source
- lda source
- pha
- .endmacro
-
- .macro PushW source
- PushB source+1
- PushB source+0
- .endmacro
-
- .macro PopB dest
- pla
- sta dest
- .endmacro
-
- .macro PopW dest
- PopB dest+0
- PopB dest+1
- .endmacro
-
- .macro bra addr
- clv
- bvc addr
- .endmacro
-
- .macro smb bitNumber, dest
- pha
- lda #(1 << bitNumber)
- ora dest
- sta dest
- pla
- .endmacro
-
- .macro smbf bitNumber, dest
- lda #(1 << bitNumber)
- ora dest
- sta dest
- .endmacro
-
- .macro rmb bitNumber, dest
- pha
- lda #(1 << bitNumber) ^ $ff
- and dest
- sta dest
- pla
- .endmacro
-
- .macro rmbf bitNumber, dest
- lda #(1 << bitNumber) ^ $ff
- and dest
- sta dest
- .endmacro
-
- .macro bbs bitNumber, source, addr
-.local Skip
- php
- pha
- lda source
- and #(1 << bitNumber)
- beq Skip
- pla
- plp
- bra addr
-Skip: pla
- plp
- .endmacro
-
- .macro bbsf bitNumber, source, addr
- .if bitNumber=7
- bit source
- bmi addr
- .else
- .if bitNumber=6
- bit source
- bvs addr
- .else
- lda source
- and #(1 << bitNumber)
- bne addr
- .endif
- .endif
- .endmacro
-
- .macro bbr bitNumber, source, addr
-.local Skip
- php
- pha
- lda source
- and #(1 << bitNumber)
- bne Skip
- pla
- plp
- bra addr
-Skip: pla
- plp
- .endmacro
-
- .macro bbrf bitNumber, source, addr
- .if bitNumber=7
- bit source
- bpl addr
- .else
- .if bitNumber=6
- bit source
- bvc addr
- .else
- lda source
- and #(1 << bitNumber)
- beq addr
- .endif
- .endif
- .endmacro
-
-;03.03.99 by Maciej Witkowiak
-
- .macro addv value
- clc
- adc #(value)
- .endmacro
-
- .macro subv value
- sec
- sbc #(value)
- .endmacro
-
- .macro bnex addr
- txa
- bne addr
- .endmacro
-
- .macro beqx addr
- txa
- beq addr
- .endmacro
+++ /dev/null
-
-;GEOS variable memory locations sorted by address
-;reassembled by Maciej 'YTM/Elysium' Witkowiak
-;4-2-99
-
-zpage = $0000
-;
-
-CPU_DDR = $00
-CPU_DATA = $01
-;
-r0 = $02
-r0L = $02
-r0H = $03
-r1 = $04
-r1L = $04
-r1H = $05
-r2 = $06
-r2L = $06
-r2H = $07
-r3 = $08
-r3L = $08
-r3H = $09
-r4 = $0a
-r4L = $0a
-r4H = $0b
-r5 = $0c
-r5L = $0c
-r5H = $0d
-r6 = $0e
-r6L = $0e
-r6H = $0f
-r7 = $10
-r7L = $10
-r7H = $11
-r8 = $12
-r8L = $12
-r8H = $13
-r9 = $14
-r9L = $14
-r9H = $15
-r10 = $16
-r10L = $16
-r10H = $17
-r11 = $18
-r11L = $18
-r11H = $19
-r12 = $1a
-r12L = $1a
-r12H = $1b
-r13 = $1c
-r13L = $1c
-r13H = $1d
-r14 = $1e
-r14L = $1e
-r14H = $1f
-r15 = $20
-r15L = $20
-r15H = $21
-;
-a0 = $fb
-a0L = $fb
-a0H = $fc
-a1 = $fd
-a1L = $fd
-a1H = $fe
-a2 = $70
-a2L = $70
-a2H = $71
-a3 = $72
-a3L = $72
-a3H = $73
-a4 = $74
-a4L = $74
-a4H = $75
-a5 = $76
-a5L = $76
-a5H = $77
-a6 = $78
-a6L = $78
-a6H = $79
-a7 = $7a
-a7L = $7a
-a7H = $7b
-a8 = $7c
-a8L = $7c
-a8H = $7d
-a9 = $7e
-a9L = $7e
-a9H = $7f
-
-;
-
-curPattern = $22
-string = $24
-baselineOffset = $26
-curSetWidth = $27
-curHeight = $29
-curIndexTable = $2a
-cardDataPntr = $2c
-currentMode = $2e
-dispBufferOn = $2f
-mouseOn = $30
-msePicPtr = $31
-windowTop = $33
-windowBottom = $34
-leftMargin = $35
-rightMargin = $37
-pressFlag = $39
-mouseXPos = $3a
-mouseYPos = $3c
-returnAddress = $3d
-graphMode = $3f
-TURBO_DD00 = $8e ; from 1541 turbo
-TURBO_DD00_CPY = $8f ; from 1541 turbo
-STATUS = $90
-curDevice = $ba
-;
-irqvec = $0314
-bkvec = $0316
-nmivec = $0318
-;
-APP_RAM = $0400
-BACK_SCR_BASE = $6000
-PRINTBASE = $7900
-OS_VARS = $8000
-;
-diskBlkBuf = $8000
-fileHeader = $8100
-curDirHead = $8200
-fileTrScTab = $8300
-dirEntryBuf = $8400
-DrACurDkNm = $841e
-DrBCurDkNm = $8430
-dataFileName = $8442
-dataDiskName = $8453
-PrntFilename = $8465
-PrntDiskName = $8476
-curDrive = $8489
-diskOpenFlg = $848a
-isGEOS = $848b
-interleave = $848c
-NUMDRV = $848d
-driveType = $848e
-_driveType = driveType-8
-turboFlags = $8492
-_turboFlags = turboFlags-8
-curRecord = $8496
-usedRecords = $8497
-fileWritten = $8498
-fileSize = $8499
-appMain = $849b
-intTopVector = $849d
-intBotVector = $849f
-mouseVector = $84a1
-keyVector = $84a3
-inputVector = $84a5
-mouseFaultVec = $84a7
-otherPressVec = $84a9
-StringFaultVec = $84ab
-alarmTmtVector = $84ad
-BRKVector = $84af
-RecoverVector = $84b1
-selectionFlash = $84b3
-alphaFlag = $84b4
-iconSelFlg = $84b5
-faultData = $84b6
-menuNumber = $84b7
-mouseTop = $84b8
-mouseBottom = $84b9
-mouseLeft = $84ba
-mouseRight = $84bc
-stringX = $84be
-stringY = $84c0
-mousePicData = $84c1
-maxMouseSpeed = $8501
-minMouseSpeed = $8502
-mouseAccel = $8503
-keyData = $8504
-mouseData = $8505
-inputData = $8506
-mouseSpeed = $8507
-random = $850a
-saveFontTab = $850c
-dblClickCount = $8515
-year = $8516
-month = $8517
-day = $8518
-hour = $8519
-minutes = $851a
-seconds = $851b
-alarmSetFlag = $851c
-sysDBData = $851d
-screencolors = $851e
-dlgBoxRamBuf = $851f ; to $8697
-;
-;$8698 - $8877 - various system data (keyboard queue, VLIR t&s, DBox, Menu, timers)
-;
-savedmoby2 = $88bb
-scr80polar = $88bc
-scr80colors = $88bd
-vdcClrMode = $88be
-driveData = $88bf
-ramExpSize = $88c3
-sysRAMFlg = $88c4
-firstBoot = $88c5
-curType = $88c6
-ramBase = $88c7
-inputDevName = $88cb
-memBase = $88cf ;???
-DrCCurDkNm = $88dc
-DrDCurDkNm = $88ee
-dir2Head = $8900
-;
-SPRITE_PICS = $8a00
-spr0pic = $8a00
-spr1pic = $8a40
-spr2pic = $8a80
-spr3pic = $8ac0
-spr4pic = $8b00
-spr5pic = $8b40
-spr6pic = $8b80
-spr7pic = $8bc0
-COLOR_MATRIX = $8c00
-;
-obj0Pointer = $8ff8
-obj1Pointer = $8ff9
-obj2Pointer = $8ffa
-obj3Pointer = $8ffb
-obj4Pointer = $8ffc
-obj5Pointer = $8ffd
-obj6Pointer = $8ffe
-obj7Pointer = $8fff
-;
-DISK_BASE = $9000
-SCREEN_BASE = $a000
-OS_ROM = $c000
-OS_JUMPTAB = $c100
-RAMC_BASE = $de00
-RAMC_WINDOW = $df00
-EXP_BASE = $df00
-MOUSE_BASE_128 = $fd00
-MOUSE_JMP_128 = $fd00
-END_MOUSE_128 = $fe80
-MOUSE_BASE = $fe80
-MOUSE_JMP = $fe80
-config = $ff00
-END_MOUSE = $fffa
-NMI_VECTOR = $fffa
-RESET_VECTOR = $fffc
-IRQ_VECTOR = $fffe
-;
-vicbase = $d000
-sidbase = $d400
-mmu = $d500
-VDC = $d600
-ctab = $d800
-cia1base = $dc00
-cia2base = $dd00
-;
-mob0xpos = $d000
-mob0ypos = $d001
-mob1xpos = $d002
-mob1ypos = $d003
-mob2xpos = $d004
-mob2ypos = $d005
-mob3xpos = $d006
-mob3ypos = $d007
-mob4xpos = $d008
-mob4ypos = $d009
-mob5xpos = $d00a
-mob5ypos = $d00b
-mob6xpos = $d00c
-mob6ypos = $d00d
-mob7xpos = $d00e
-mob7ypos = $d00f
-msbxpos = $d010
-grcntrl1 = $d011
-rasreg = $d012
-lpxpos = $d013
-lpypos = $d014
-mobenble = $d015
-grcntrl2 = $d016
-grmemptr = $d018
-grirq = $d019
-grirqen = $d01a
-moby2 = $d017
-mobprior = $d01b
-mobmcm = $d01c
-mobx2 = $d01d
-mobmobcol = $d01e
-mobbakcol = $d01f
-extclr = $d020
-bakclr0 = $d021
-bakclr1 = $d022
-bakclr2 = $d023
-bakclr3 = $d024
-mcmclr0 = $d025
-mcmclr1 = $d026
-mob0clr = $d027
-mob1clr = $d028
-mob2clr = $d029
-mob3clr = $d02a
-mob4clr = $d02b
-mob5clr = $d02c
-mob6clr = $d02d
-mob7clr = $d02e
-keyreg = $d02f
-clkreg = $d030
-
-;
-vdcreg = $d600
-vdcdata = $d601
-;
+++ /dev/null
-
-;GEOS various variables in OS_ROM area
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-bootName = $c006
-version = $c00f
-nationality = $c010
-sysFlgCopy = $c012
-c128Flag = $c013
-dateCopy = $c018
\ No newline at end of file
+++ /dev/null
-
-;GEOS Input Driver Jump Tab
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;for C64
-;MOUSE_JMP = $fe80
-SlowMouse = $fe83
-UpdateMouse = $fe86
-SetMouse = $fe89
-
-;for C128
-;MOUSE_JMP_128 = $fd00
-SlowMouse_128 = $fd03
-UpdateMouse_128 = $fd06
-SetMouse_128 = $fd09
+++ /dev/null
-
-;GEOS System Jump Table
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;jump table
-InterruptMain = $c100
-InitProcesses = $c103
-RestartProcess = $c106
-EnableProcess = $c109
-BlockProcess = $c10c
-UnBlockProcess = $c10f
-FreezeProcess = $c112
-UnFreezeProcess = $c115
-HorizontalLine = $c118
-InvertLine = $c11b
-RecoverLine = $c11e
-VerticalLine = $c121
-Rectangle = $c124
-FrameRectangle = $c127
-InvertRectangle = $c12a
-RecoverRectangle = $c12d
-DrawLine = $c130
-DrawPoint = $c133
-GraphicsString = $c136
-SetPattern = $c139
-GetScanLine = $c13c
-TestPoint = $c13f
-BitmapUp = $c142
-PutChar = $c145
-PutString = $c148
-UseSystemFont = $c14b
-StartMouseMode = $c14e
-DoMenu = $c151
-RecoverMenu = $c154
-RecoverAllMenus = $c157
-DoIcons = $c15a
-DShiftLeft = $c15d
-BBMult = $c160
-BMult = $c163
-DMult = $c166
-Ddiv = $c169
-DSdiv = $c16c
-Dabs = $c16f
-Dnegate = $c172
-Ddec = $c175
-ClearRam = $c178
-FillRam = $c17b
-MoveData = $c17e
-InitRam = $c181
-PutDecimal = $c184
-GetRandom = $c187
-MouseUp = $c18a
-MouseOff = $c18d
-DoPreviousMenu = $c190
-ReDoMenu = $c193
-GetSerialNumber = $c196
-Sleep = $c199
-ClearMouseMode = $c19c
-i_Rectangle = $c19f
-i_FrameRectangle = $c1a2
-i_RecoverRectangle = $c1a5
-i_GraphicsString = $c1a8
-i_BitmapUp = $c1ab
-i_PutString = $c1ae
-GetRealSize = $c1b1
-i_FillRam = $c1b4
-i_MoveData = $c1b7
-GetString = $c1ba
-GotoFirstMenu = $c1bd
-InitTextPrompt = $c1c0
-MainLoop = $c1c3
-DrawSprite = $c1c6
-GetCharWidth = $c1c9
-LoadCharSet = $c1cc
-PosSprite = $c1cf
-EnablSprite = $c1d2
-DisablSprite = $c1d5
-CallRoutine = $c1d8
-CalcBlksFree = $c1db
-ChkDkGEOS = $c1de
-NewDisk = $c1e1
-GetBlock = $c1e4
-PutBlock = $c1e7
-SetGEOSDisk = $c1ea
-SaveFile = $c1ed
-SetGDirEntry = $c1f0
-BldGDirEntry = $c1f3
-GetFreeDirBlk = $c1f6
-WriteFile = $c1f9
-BlkAlloc = $c1fc
-ReadFile = $c1ff
-SmallPutChar = $c202
-FollowChain = $c205
-GetFile = $c208
-FindFile = $c20b
-CRC = $c20e
-LdFile = $c211
-EnterTurbo = $c214
-LdDeskAcc = $c217
-ReadBlock = $c21a
-LdApplic = $c21d
-WriteBlock = $c220
-VerWriteBlock = $c223
-FreeFile = $c226
-GetFHdrInfo = $c229
-EnterDeskTop = $c22c
-StartAppl = $c22f
-ExitTurbo = $c232
-PurgeTurbo = $c235
-DeleteFile = $c238
-FindFTypes = $c23b
-RstrAppl = $c23e
-ToBASIC = $c241
-FastDelFile = $c244
-GetDirHead = $c247
-PutDirHead = $c24a
-NxtBlkAlloc = $c24d
-ImprintRectangle = $c250
-i_ImprintRectangle = $c253
-DoDlgBox = $c256
-RenameFile = $c259
-InitForIO = $c25c
-DoneWithIO = $c25f
-DShiftRight = $c262
-CopyString = $c265
-CopyFString = $c268
-CmpString = $c26b
-CmpFString = $c26e
-FirstInit = $c271
-OpenRecordFile = $c274
-CloseRecordFile = $c277
-NextRecord = $c27a
-PreviousRecord = $c27d
-PointRecord = $c280
-DeleteRecord = $c283
-InsertRecord = $c286
-AppendRecord = $c289
-ReadRecord = $c28c
-WriteRecord = $c28f
-SetNextFree = $c292
-UpdateRecordFile = $c295
-GetPtrCurDkNm = $c298
-PromptOn = $c29b
-PromptOff = $c29e
-OpenDisk = $c2a1
-DoInlineReturn = $c2a4
-GetNextChar = $c2a7
-BitmapClip = $c2aa
-FindBAMBit = $c2ad
-SetDevice = $c2b0
-IsMseInRegion = $c2b3
-ReadByte = $c2b6
-FreeBlock = $c2b9
-ChangeDiskDevice = $c2bc
-RstrFrmDialogue = $c2bf
-Panic = $c2c2
-BitOtherClip = $c2c5
-StashRAM = $c2c8
-FetchRAM = $c2cb
-SwapRAM = $c2ce
-VerifyRAM = $c2d1
-DoRAMOp = $c2d4
-
-;only in GEOS 128
-TempHideMouse = $c2d7
-SetMousePicture = $c2da
-SetNewMode = $c2dd
-NormalizeX = $c2e0
-MoveBData = $c2e3
-SwapBData = $c2e6
-VerifyBData = $c2e9
-DoBOp = $c2ec
-AccessCache = $c2ef
-HideOnlyMouse = $c2f2
-SetColorMode = $c2f5
-ColorCard = $c2f8
-ColorRectangle = $c2fb
+++ /dev/null
-
-;GEOS Printer Driver Jump Table
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;jump table
-InitForPrint = $7900
-StartPrint = $7903
-PrintBuffer = $7906
-StopPrint = $7909
-GetDimensions = $790c
-PrinsASCII = $790f
-StartASCII = $7912
-SetNLQ = $7915
+++ /dev/null
-#
-# Makefile for GEOS lib
-# for cc65
-#
-#
-
-%.o: %.s
- @$(AS) -o $@ $(AFLAGS) $<
-
-
-S_OBJS = crc.o doublepop.o reuregs.o clearram.o fillram.o initram.o movedata.o\
- stashram.o fetchram.o swapram.o verifyram.o\
- doublespop.o copystring.o cmpstring.o copyfstring.o cmpfstring.o
-
-all: $(S_OBJS)
-
-clean:
- @$(RM) *.~ $(S_OBJS) core
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 20.08.2003
-
-; void * ClearRam (char *dest, int length);
-
- .import DoublePop
- .export _ClearRam
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_ClearRam:
- jsr DoublePop
- pha
- txa
- pha
- jsr ClearRam
- pla
- tax
- pla
- rts
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.99, 29.07.2000
-
-; char CmpFString (char length, char *dest, char* source);
-
- .import DoubleSPop, SetPtrXY
- .import popa, return0, return1
- .export _CmpFString
-
- .include "../inc/jumptab.inc"
-
-_CmpFString:
- jsr DoubleSPop
- jsr popa
- jsr SetPtrXY
- jsr CmpFString
- bne L1
- jmp return0
-L1: jmp return1
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.1999, 2.1.2003
-
-; char CmpString (char *dest, char* source);
-
- .import DoubleSPop
- .import return0, return1
- .export _CmpString
-
- .include "../inc/jumptab.inc"
-
-_CmpString:
- jsr DoubleSPop
- jsr CmpString
- bne L1
- jmp return0
-L1: jmp return1
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.99, 29.07.2000
-
-; void CopyFString (char length, char *dest, char* source);
-
- .import DoubleSPop, SetPtrXY
- .import popa
- .export _CopyFString
-
- .include "../inc/jumptab.inc"
-
-_CopyFString:
- jsr DoubleSPop
- jsr popa
- jsr SetPtrXY
- jmp CopyFString
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 22.12.99
-
-; void CopyString (char *dest, char* source);
-
- .import DoubleSPop
- .export _CopyString
-
- .include "../inc/jumptab.inc"
-
-_CopyString:
- jsr DoubleSPop
- jmp CopyString
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 22.12.99
-
-; int CRC (char *memory, int length);
-
- .import DoublePop
- .export _CRC
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_CRC:
- jsr DoublePop
- jsr CRC
- lda r2L
- ldx r2H
- rts
-
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 31.12.99
-
- .import popax
- .export DoublePop
-
- .include "../inc/geossym.inc"
-
-DoublePop:
- sta r0L
- stx r0H
- jsr popax
- sta r1L
- stx r1H
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.99, 29.07.2000
-
- .import popax
- .importzp ptr3, ptr4
- .export DoubleSPop
- .export SetPtrXY
-
- .include "../inc/geossym.inc"
-
-DoubleSPop:
- sta ptr4
- stx ptr4+1
- jsr popax
- sta ptr3
- stx ptr3+1
-; rts
-;
-; SetPtrXY can be sometimes executed twice, but even this way it is few cycles
-; faster...
-
-SetPtrXY:
- ldx #ptr4
- ldy #ptr3
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void FetchRAM (char REUBank, int length, char *from, char *dest);
-
- .import REURegs
- .export _FetchRAM
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_FetchRAM:
- jsr REURegs
- jmp FetchRAM
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 15.07.2001
-
-; void * FillRam (char *dest, char what, int length);
-
- .import popa, popax
- .export _FillRam
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_FillRam:
- sta r0L
- stx r0H
- jsr popa
- sta r2L
- jsr popax
- sta r1L
- stx r1H
- pha
- txa
- pha
- jsr FillRam
- pla
- tax
- pla
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void InitRam (struct inittab*);
-
- .export _InitRam
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_InitRam:
- sta r0L
- stx r0H
- jmp InitRam
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 15.07.2001
-
-; void* MoveData (char* dest, char *source, int length);
-
- .import popax
- .export _MoveData
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_MoveData:
- sta r2L
- stx r2H
- jsr popax
- sta r0L
- stx r0H
- jsr popax
- sta r1L
- stx r1H
- jsr MoveData
- lda r1L ; return dest ptr to be compatible with memmove and memcpy
- ldx r1H
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 31.12.99
-
- .import popax, popa
- .import DoublePop
- .export REURegs
-
- .include "../inc/geossym.inc"
-
-REURegs:
- jsr DoublePop
- jsr popax
- sta r2L
- stx r2H
- jsr popa
- sta r3L
- rts
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void StashRAM (char REUBank, int length, char *dest, char *from);
-
- .import REURegs
- .export _StashRAM
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_StashRAM:
- jsr REURegs
- jmp StashRAM
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void SwapRAM (char REUBank, int length, char *reuaddy, char *cpuaddy);
-; note that in all REU procs last two pointers are identified like here
-
- .import REURegs
- .export _SwapRAM
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_SwapRAM:
- jsr REURegs
- jmp SwapRAM
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char VerifyRAM (char REUBank, int length, char *reuaddy, char *cpuaddy);
-
- .import REURegs
- .export _VerifyRAM
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_VerifyRAM:
- jsr REURegs
- jsr VerifyRAM
- txa
- ldx #0
- rts
+++ /dev/null
-#
-# Makefile for GEOS lib
-# for cc65
-#
-#
-
-%.o: %.s
- @$(AS) -o $@ $(AFLAGS) $<
-
-
-S_OBJS = domenu.o dopreviousmenu.o redomenu.o recovermenu.o recoverallmenus.o\
- gotofirstmenu.o doicons.o
-
-all: $(S_OBJS)
-
-clean:
- @$(RM) *.~ $(S_OBJS) core
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DoIcons (struct icontab *myicons);
-
- .export _DoIcons
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_DoIcons:
- sta r0L
- stx r0H
- jmp DoIcons
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DoMenu (struct menu *mymenu);
-
- .export _DoMenu
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_DoMenu:
- sta r0L
- stx r0H
- lda #0
- jmp DoMenu
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DoPreviousMenu (void);
-
- .export _DoPreviousMenu
-
- .include "../inc/jumptab.inc"
-
-_DoPreviousMenu = DoPreviousMenu
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void GotoFirstMenu (void);
-
- .export _GotoFirstMenu
-
- .include "../inc/jumptab.inc"
-
-_GotoFirstMenu = GotoFirstMenu
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void RecoverAllMenus (void);
-
- .export _RecoverAllMenus
-
- .include "../inc/jumptab.inc"
-
-_RecoverAllMenus = RecoverAllMenus
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void RecoverMenu (void);
-
- .export _RecoverMenu
-
- .include "../inc/jumptab.inc"
-
-_RecoverMenu = RecoverMenu
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void ReDoMenu (void);
-
- .export _ReDoMenu
-
- .include "../inc/jumptab.inc"
-
-_ReDoMenu = ReDoMenu
\ No newline at end of file
+++ /dev/null
-#
-# Makefile for GEOS lib
-# for cc65
-#
-#
-
-%.o: %.s
- @$(AS) -o $@ $(AFLAGS) $<
-
-
-S_OBJS = startmousemode.o clearmousemode.o mouseup.o mouseoff.o\
- drawsprite.o possprite.o enablsprite.o disablsprite.o\
- ismseinregion.o inittextprompt.o promptoff.o prompton.o\
- getnextchar.o\
- mouse.o
-
-all: $(S_OBJS)
-
-clean:
- @$(RM) *.~ $(S_OBJS) core
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void ClearMouseMode (void);
-
- .export _ClearMouseMode
-
- .include "../inc/jumptab.inc"
-
-_ClearMouseMode = ClearMouseMode
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DisablSprite (char spritenum);
-
- .export _DisablSprite
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_DisablSprite:
- sta r3L
- jmp DisablSprite
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-;
-; void DrawSprite (char spritenum, char *tab63 );
-;
-
- .import popa
- .export _DrawSprite
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_DrawSprite:
-
- sta r4L
- stx r4H
- jsr popa
- sta r3L
- jmp DrawSprite
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void EnablSprite (char spritenum);
-
- .export _EnablSprite
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_EnablSprite:
- sta r3L
- jmp EnablSprite
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char GetNextChar (void);
-; note that if it returns 0 (FALSE) then no characters are available
-
- .export _GetNextChar
-
- .include "../inc/jumptab.inc"
-
-_GetNextChar:
- jsr GetNextChar
- ldx #0
- tay ; preserve Z flag
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void InitTextPrompt (char height);
-
- .export _InitTextPrompt
-
- .include "../inc/jumptab.inc"
-
-_InitTextPrompt = InitTextPrompt
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char IsMseInRegion (struct window *mywindow);
-
- .import _InitDrawWindow
-
- .export _IsMseInRegion
-
- .include "../inc/jumptab.inc"
-
-_IsMseInRegion:
- jsr _InitDrawWindow
- jsr IsMseInRegion
- ldx #0
- rts
+++ /dev/null
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 2.7.2001
-;
-; Wrapper for GEOS standard input device interface
-;
-
- .export _mouse_init, _mouse_done
- .export _mouse_hide, _mouse_show
- .export _mouse_box
- .export _mouse_pos, _mouse_info
- .export _mouse_move, _mouse_buttons
-
- .import popsreg, addysp1
- .importzp sp, sreg, ptr1
-
- .include "../inc/const.inc"
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-
-.code
-
-; --------------------------------------------------------------------------
-;
-; unsigned char __fastcall__ mouse_init (unsigned char type);
-;
-
-_mouse_init:
- jsr StartMouseMode
- jsr MouseOff
-
- lda #0
- sta mouseTop
- sta mouseLeft
- sta mouseLeft+1
- lda #199
- sta mouseBottom
- lda graphMode
- bpl _mse_screen320
-
- lda #<639 ; 80 columns on C128
- ldx #>639
- bne _mse_storex
-_mse_screen320:
- lda #<319 ; 40 columns on C64/C128
- ldx #>319
-_mse_storex:
- sta mouseRight
- stx mouseRight+1
-_mse_initend:
- lda #0
- tax
-; --------------------------------------------------------------------------
-;
-; void mouse_done (void);
-;
-_mouse_done:
- rts
-
-; --------------------------------------------------------------------------
-;
-; void mouse_hide (void);
-;
-
-_mouse_hide = MouseOff
-
-; --------------------------------------------------------------------------
-;
-; void mouse_show (void);
-;
-
-_mouse_show = MouseUp
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_box (int minx, int miny, int maxx, int maxy);
-;
-
-_mouse_box:
- ldy #0 ; Stack offset
-
- sta mouseBottom
-
- lda (sp),y
- sta mouseRight
- iny
- lda (sp),y
- sta mouseRight+1 ; maxx
-
- iny
- lda (sp),y
- sta mouseTop
- iny ; Skip high byte
-
- iny
- lda (sp),y
- sta mouseLeft
- iny
- lda (sp),y
- sta mouseLeft+1 ; minx
-
- jmp addysp1 ; Drop params, return
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_pos (struct mouse_pos* pos);
-; /* Return the current mouse position */
-;
-
-_mouse_pos:
- sta ptr1
- stx ptr1+1 ; Remember the argument pointer
-
- ldy #0 ; Structure offset
-
- php
- sei ; Disable interrupts
-
- lda mouseXPos ; Transfer the position
- sta (ptr1),y
- lda mouseXPos+1
- iny
- sta (ptr1),y
- lda mouseYPos
- iny
- sta (ptr1),y
- lda #$00
- iny
- sta (ptr1),y
-
- plp ; Reenable interrupts
- rts ; Done
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_info (struct mouse_info* info);
-; /* Return the state of the mouse buttons and the position of the mouse */
-;
-
-_mouse_info:
-
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
- jsr _mouse_pos
-
-; Fill in the button state
-
- jsr _mouse_buttons ; Will not touch ptr1
- iny
- sta (ptr1),y
-
- rts
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_move (int x, int y);
-;
-
-_mouse_move:
- jsr popsreg ; Get X
- php
- sei ; Disable interrupts
- sta mouseYPos
- lda sreg
- ldx sreg+1
- sta mouseXPos
- stx mouseXPos+1
- plp ; Enable interrupts
- rts
-
-; --------------------------------------------------------------------------
-;
-; unsigned char mouse_buttons (void);
-;
-
-_mouse_buttons:
- ldx #0
- lda pressFlag
- and #SET_MOUSE
- lsr
- rts
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void MouseOff (void);
-
- .export _MouseOff
-
- .include "../inc/jumptab.inc"
-
-_MouseOff = MouseOff
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void MouseUp (void);
-
- .export _MouseUp
-
- .include "../inc/jumptab.inc"
-
-_MouseUp = MouseUp
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-;
-; void PosSprite (char spritenum, struct pixel *position );
-;
-
- .importzp ptr4
- .import popa
- .export _PosSprite
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_PosSprite:
- sta ptr4
- stx ptr4+1
- ldy #0
- lda (ptr4),y
- sta r4L
- iny
- lda (ptr4),y
- sta r4H
- iny
- lda (ptr4),y
- sta r5L
- jsr popa
- sta r3L
- jmp PosSprite
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void PromptOff (void);
-
- .export _PromptOff
-
- .include "../inc/jumptab.inc"
-
-_PromptOff = PromptOff
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void PromptOn (struct pixel *);
-
- .importzp ptr4
- .export _PromptOn
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_PromptOn:
- sta ptr4
- stx ptr4+1
- ldy #0
-promptLp: lda (ptr4),y
- sta stringX,y
- iny
- cpy #3
- bne promptLp
- jmp PromptOn
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void StartMouseMode (void);
-
- .export _StartMouseMode
-
- .include "../inc/jumptab.inc"
-
-_StartMouseMode:
- clc
- jmp StartMouseMode
\ No newline at end of file
+++ /dev/null
-#
-# Makefile for GEOS lib
-# for cc65
-#
-#
-
-%.o: %.s
- @$(AS) -o $@ $(AFLAGS) $<
-
-
-S_OBJS = processinitrestartenable.o processblock.o processfreeze.o processsleep.o
-
-all: $(S_OBJS)
-
-clean:
- @$(RM) *.~ $(S_OBJS) core
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 27.10.99
-
-;
-; void InitProcesses (char number, struct process* proctab);
-; (rest)
-; void BlockProcess (char number);
-; void UnBlockProcess (char number);
-;
-
- .export _BlockProcess
- .export _UnBlockProcess
-
- .include "../inc/jumptab.inc"
-
-_BlockProcess:
- tax
- jmp BlockProcess
-
-_UnBlockProcess:
- tax
- jmp UnBlockProcess
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 27.10.99
-
-;
-; void FreezeProcess (char number);
-; void UnFreezeProcess (char number);
-;
-
- .export _FreezeProcess
- .export _UnFreezeProcess
-
- .include "../inc/jumptab.inc"
-
-_FreezeProcess:
- tax
- jmp FreezeProcess
-
-_UnFreezeProcess:
- tax
- jmp UnFreezeProcess
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 27.10.99
-
-;
-; void InitProcesses (char number, struct process* proctab);
-; void RestartProcess (char number);
-; void EnableProcess (char number);
-;
-
- .import popa
- .export _InitProcesses
- .export _RestartProcess
- .export _EnableProcess
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_InitProcesses:
-
- sta r0L
- stx r0H
- jsr popa
- jmp InitProcesses
-
-_RestartProcess:
- tax
- jmp RestartProcess
-
-_EnableProcess:
- tax
- jmp EnableProcess
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 15.8.2003
-
-;
-; void Sleep (int jiffies);
-;
-
- .export _Sleep
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
- .importzp ptr1
- .importzp tmp1
-
-_SleepExit:
- jsr Sleep ; call Sleep
- ldx tmp1
- txs ; restore stack pointer
- jmp (ptr1) ; when timeouts control will reach here
-
-_Sleep:
- sta r0L ; store data
- stx r0H
- pla
- sta ptr1
- pla
- sta ptr1+1 ; preserve return address
- inc ptr1
- bne @L0
- inc ptr1+1 ; fix return address
-@L0: tsx
- stx tmp1 ; preserve stack pointer
- jsr _SleepExit ; call Sleep
- jmp MainLoop ; immediate return here - go to idle loop
+++ /dev/null
-#
-# Makefile for GEOS lib
-# for cc65
-#
-
-%.o: %.c
- @$(CC) $(CFLAGS) $<
- @$(AS) -g -o $@ $(AFLAGS) $(*).s
-
-%.o: %.s
- @$(AS) -o $@ $(AFLAGS) $<
-
-C_OBJS =
-S_OBJS = call.o
-
-all: $(C_OBJS) $(S_OBJS)
-
-clean:
- @$(RM) core *.~ $(S_OBJS) $(C_OBJS:.o=.s) $(C_OBJS)
+++ /dev/null
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 23.12.2002
-;
-; CC65 runtime: call function via pointer in ax
-;
-
- .include "../inc/jumptab.inc"
-
- .export callax
-
-callax = CallRoutine
+++ /dev/null
-#
-# Makefile for GEOS lib
-# for cc65
-#
-#
-
-%.o: %.s
- @$(AS) -o $@ $(AFLAGS) $<
-
-%.o: %.c
- @$(CC) $(CFLAGS) $<
- @$(AS) -g -o $@ $(AFLAGS) $(*).s
-
-S_OBJS = ctype.o \
- callroutine.o \
- enterdesktop.o \
- firstinit.o \
- get_ostype.o \
- getrandom.o \
- getserialnumber.o \
- initdoneio.o \
- mainloop.o \
- panic.o \
- tobasic.o \
- setdevice.o \
- sysuname.o
-
-C_OBJS = systime.o
-
-all: $(C_OBJS) $(S_OBJS)
-
-clean:
- @$(RM) *.~ $(C_OBJS:.o=.s) $(C_OBJS) $(S_OBJS) core
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void CallRoutine (myRoutine);
-
- .export _CallRoutine
-
- .include "../inc/jumptab.inc"
-
-_CallRoutine = CallRoutine
\ No newline at end of file
+++ /dev/null
-;
-; Ullrich von Bassewitz, 02.06.1998
-; Maciej Witkowiak, 06.04.2002
-;
-; Character specification table.
-;
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; Value that must be added to a lower case char to make it an upper case
-; char (example: for ASCII, this must be $E0).
-
-
- .export __cdiff
-
-__cdiff:
- .byte $e0
-
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-; * It is fast. If it were'nt for the slow parameter passing of cc65, one
-; could even define macros for the isxxx functions (this is usually
-; done on other platforms).
-;
-; * It is highly portable. The only unportable part is the table itself,
-; all real code goes into the common library.
-;
-; * We save some code in the isxxx functions.
-;
-;
-; Bit assignments:
-;
-; 0 - Lower case char
-; 1 - Upper case char
-; 2 - Numeric digit
-; 3 - Hex digit (both, lower and upper)
-; 4 - Control character
-; 5 - The space character itself
-; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
-; 7 - Space or tab character
-
-
-; The table is taken from Craig S. Bruce technical docs for the ACE os
-
- .export __ctype
-
-__ctype:
- .byte $10 ; 0/00 ___rvs_@___
- .byte $10 ; 1/01 ___rvs_a___
- .byte $10 ; 2/02 ___rvs_b___
- .byte $10 ; 3/03 ___rvs_c___
- .byte $10 ; 4/04 ___rvs_d___
- .byte $10 ; 5/05 ___rvs_e___
- .byte $10 ; 6/06 ___rvs_f___
- .byte $10 ; 7/07 _BEL/rvs_g_
- .byte $10 ; 8/08 ___rvs_h___
- .byte $D0 ; 9/09 _TAB/rvs_i_
- .byte $50 ; 10/0a _BOL/rvs_j_
- .byte $10 ; 11/0b ___rvs_k___
- .byte $10 ; 12/0c ___rvs_l___
- .byte $50 ; 13/0d _CR_/rvs_m_
- .byte $10 ; 14/0e ___rvs_n___
- .byte $10 ; 15/0f ___rvs_o___
- .byte $10 ; 16/10 ___rvs_p___
- .byte $50 ; 17/11 _VT_/rvs_q_
- .byte $10 ; 18/12 ___rvs_r___
- .byte $10 ; 19/13 ___rvs_s___
- .byte $50 ; 20/14 _BS_/rvs_t_
- .byte $10 ; 21/15 ___rvs_u___
- .byte $10 ; 22/16 ___rvs_v___
- .byte $10 ; 23/17 ___rvs_w___
- .byte $10 ; 24/18 ___rvs_x___
- .byte $10 ; 25/19 ___rvs_y___
- .byte $10 ; 26/1a ___rvs_z___
- .byte $10 ; 27/1b ___rvs_[___
- .byte $10 ; 28/1c ___rvs_\___
- .byte $10 ; 29/1d ___rvs_]___
- .byte $10 ; 30/1e ___rvs_^___
- .byte $10 ; 31/1f _rvs_under_
- .byte $A0 ; 32/20 ___SPACE___
- .byte $00 ; 33/21 _____!_____
- .byte $00 ; 34/22 _____"_____
- .byte $00 ; 35/23 _____#_____
- .byte $00 ; 36/24 _____$_____
- .byte $00 ; 37/25 _____%_____
- .byte $00 ; 38/26 _____&_____
- .byte $00 ; 39/27 _____'_____
- .byte $00 ; 40/28 _____(_____
- .byte $00 ; 41/29 _____)_____
- .byte $00 ; 42/2a _____*_____
- .byte $00 ; 43/2b _____+_____
- .byte $00 ; 44/2c _____,_____
- .byte $00 ; 45/2d _____-_____
- .byte $00 ; 46/2e _____._____
- .byte $00 ; 47/2f _____/_____
- .byte $0C ; 48/30 _____0_____
- .byte $0C ; 49/31 _____1_____
- .byte $0C ; 50/32 _____2_____
- .byte $0C ; 51/33 _____3_____
- .byte $0C ; 52/34 _____4_____
- .byte $0C ; 53/35 _____5_____
- .byte $0C ; 54/36 _____6_____
- .byte $0C ; 55/37 _____7_____
- .byte $0C ; 56/38 _____8_____
- .byte $0C ; 57/39 _____9_____
- .byte $00 ; 58/3a _____:_____
- .byte $00 ; 59/3b _____;_____
- .byte $00 ; 60/3c _____<_____
- .byte $00 ; 61/3d _____=_____
- .byte $00 ; 62/3e _____>_____
- .byte $00 ; 63/3f _____?_____
-
- .byte $00 ; 64/40 _____@_____
- .byte $09 ; 65/41 _____a_____
- .byte $09 ; 66/42 _____b_____
- .byte $09 ; 67/43 _____c_____
- .byte $09 ; 68/44 _____d_____
- .byte $09 ; 69/45 _____e_____
- .byte $09 ; 70/46 _____f_____
- .byte $01 ; 71/47 _____g_____
- .byte $01 ; 72/48 _____h_____
- .byte $01 ; 73/49 _____i_____
- .byte $01 ; 74/4a _____j_____
- .byte $01 ; 75/4b _____k_____
- .byte $01 ; 76/4c _____l_____
- .byte $01 ; 77/4d _____m_____
- .byte $01 ; 78/4e _____n_____
- .byte $01 ; 79/4f _____o_____
- .byte $01 ; 80/50 _____p_____
- .byte $01 ; 81/51 _____q_____
- .byte $01 ; 82/52 _____r_____
- .byte $01 ; 83/53 _____s_____
- .byte $01 ; 84/54 _____t_____
- .byte $01 ; 85/55 _____u_____
- .byte $01 ; 86/56 _____v_____
- .byte $01 ; 87/57 _____w_____
- .byte $01 ; 88/58 _____x_____
- .byte $01 ; 89/59 _____y_____
- .byte $01 ; 90/5a _____z_____
- .byte $00 ; 91/5b _____[_____
- .byte $00 ; 92/5c _____\_____
- .byte $00 ; 93/5d _____]_____
- .byte $00 ; 94/5e _____^_____
- .byte $00 ; 95/5f _UNDERLINE_
-
- .byte $00 ; 96/60 _A`_grave__
- .byte $0a ; 97/61 _A'_acute__
- .byte $0a ; 98/62 _A^_circum_
- .byte $0a ; 99/63 _A~_tilde__
- .byte $0a ; 100/64 _A"_dieres_
- .byte $0a ; 101/65 _A__ring___
- .byte $0a ; 102/66 _AE________
- .byte $02 ; 103/67 _C,cedilla_
- .byte $02 ; 104/68 _E`_grave__
- .byte $02 ; 105/69 _E'_acute__
- .byte $02 ; 106/6a _E^_circum_
- .byte $02 ; 107/6b _E"_dieres_
- .byte $02 ; 108/6c _I`_grave__
- .byte $02 ; 109/6d _I'_acute__
- .byte $02 ; 110/6e _I^_circum_
- .byte $02 ; 111/6f _I"_dieres_
- .byte $02 ; 112/70 _D-_Eth_lr_
- .byte $02 ; 113/71 _N~_tilde__
- .byte $02 ; 114/72 _O`_grave__
- .byte $02 ; 115/73 _O'_acute__
- .byte $02 ; 116/74 _O^_circum_
- .byte $02 ; 117/75 _O~_tilde__
- .byte $02 ; 118/76 _O"_dieres_
- .byte $02 ; 119/77 __multiply_
- .byte $02 ; 120/78 _O/_slash__
- .byte $02 ; 121/79 _U`_grave__
- .byte $02 ; 122/7a _U'_acute__
- .byte $00 ; 123/7b _U^_circum_
- .byte $00 ; 124/7c _U"_dieres_
- .byte $00 ; 125/7d _Y'_acute__
- .byte $00 ; 126/7e _cap_thorn_
- .byte $00 ; 127/7f _Es-sed_B__
-
- .byte $00 ; 128/80 __bullet___
- .byte $00 ; 129/81 __v_line___
- .byte $00 ; 130/82 __h_line___
- .byte $00 ; 131/83 ___cross___
- .byte $00 ; 132/84 _tl_corner_
- .byte $00 ; 133/85 _tr_corner_
- .byte $00 ; 134/86 _bl_corner_
- .byte $00 ; 135/87 _br_corner_
- .byte $00 ; 136/88 ___l_tee___
- .byte $00 ; 137/89 ___r_tee___
- .byte $00 ; 138/8a ___t_tee___
- .byte $00 ; 139/8b ___b_tee___
- .byte $00 ; 140/8c ___heart___
- .byte $00 ; 141/8d __diamond__
- .byte $00 ; 142/8e ___club____
- .byte $00 ; 143/8f ___spade___
- .byte $00 ; 144/90 _s_circle__
- .byte $00 ; 145/91 __circle___
- .byte $00 ; 146/92 ___pound___
- .byte $00 ; 147/93 _CLS/check_
- .byte $00 ; 148/94 ____pi_____
- .byte $00 ; 149/95 ____+/-____
- .byte $00 ; 150/96 __divide___
- .byte $00 ; 151/97 __degree___
- .byte $00 ; 152/98 _c_checker_
- .byte $00 ; 153/99 _f_checker_
- .byte $00 ; 154/9a _solid_sq__
- .byte $00 ; 155/9b __cr_char__
- .byte $00 ; 156/9c _up_arrow__
- .byte $00 ; 157/9d _down_arro_
- .byte $00 ; 158/9e _left_arro_
- .byte $00 ; 159/9f _right_arr_
- .byte $00 ; 160/a0 _req space_
- .byte $00 ; 161/a1 _!_invertd_
- .byte $00 ; 162/a2 ___cent____
- .byte $00 ; 163/a3 ___pound___
- .byte $00 ; 164/a4 __currency_
- .byte $00 ; 165/a5 ____yen____
- .byte $00 ; 166/a6 _|_broken__
- .byte $00 ; 167/a7 __section__
- .byte $00 ; 168/a8 __umulaut__
- .byte $00 ; 169/a9 _copyright_
- .byte $00 ; 170/aa __fem_ord__
- .byte $00 ; 171/ab _l_ang_quo_
- .byte $00 ; 172/ac ____not____
- .byte $00 ; 173/ad _syl_hyphn_
- .byte $00 ; 174/ae _registerd_
- .byte $00 ; 175/af _overline__
- .byte $00 ; 176/b0 __degrees__
- .byte $00 ; 177/b1 ____+/-____
- .byte $00 ; 178/b2 _2_supersc_
- .byte $00 ; 179/b3 _3_supersc_
- .byte $00 ; 180/b4 ___acute___
- .byte $00 ; 181/b5 ____mu_____
- .byte $00 ; 182/b6 _paragraph_
- .byte $00 ; 183/b7 __mid_dot__
- .byte $00 ; 184/b8 __cedilla__
- .byte $00 ; 185/b9 _1_supersc_
- .byte $00 ; 186/ba __mas_ord__
- .byte $00 ; 187/bb _r_ang_quo_
- .byte $00 ; 188/bc ____1/4____
- .byte $00 ; 189/bd ____1/2____
- .byte $00 ; 190/be ____3/4____
- .byte $00 ; 191/bf _?_invertd_
-
- .byte $00 ; 192/c0 _____`_____
- .byte $00 ; 193/c1 _____A_____
- .byte $00 ; 194/c2 _____B_____
- .byte $00 ; 195/c3 _____C_____
- .byte $00 ; 196/c4 _____D_____
- .byte $00 ; 197/c5 _____E_____
- .byte $00 ; 198/c6 _____F_____
- .byte $00 ; 199/c7 _____G_____
- .byte $00 ; 200/c8 _____H_____
- .byte $00 ; 201/c9 _____I_____
- .byte $00 ; 202/ca _____J_____
- .byte $00 ; 203/cb _____K_____
- .byte $00 ; 204/cc _____L_____
- .byte $00 ; 205/cd _____M_____
- .byte $00 ; 206/ce _____N_____
- .byte $00 ; 207/cf _____O_____
- .byte $00 ; 208/d0 _____P_____
- .byte $00 ; 209/d1 _____Q_____
- .byte $00 ; 210/d2 _____R_____
- .byte $00 ; 211/d3 _____S_____
- .byte $00 ; 212/d4 _____T_____
- .byte $00 ; 213/d5 _____U_____
- .byte $00 ; 214/d6 _____V_____
- .byte $00 ; 215/d7 _____W_____
- .byte $00 ; 216/d8 _____X_____
- .byte $00 ; 217/d9 _____Y_____
- .byte $00 ; 218/da _____Z_____
- .byte $00 ; 219/db _____{_____
- .byte $00 ; 220/dc _____|_____
- .byte $00 ; 221/dd _____}_____
- .byte $00 ; 222/de _____~_____
- .byte $00 ; 223/df ___HOUSE___
- .byte $00 ; 224/e0 _a`_grave__
- .byte $00 ; 225/e1 _a'_acute__
- .byte $00 ; 226/e2 _a^_circum_
- .byte $00 ; 227/e3 _a~_tilde__
- .byte $00 ; 228/e4 _a"_dieres_
- .byte $00 ; 229/e5 _a__ring___
- .byte $00 ; 230/e6 _ae________
- .byte $00 ; 231/e7 _c,cedilla_
- .byte $00 ; 232/e8 _e`_grave__
- .byte $00 ; 233/e9 _e'_acute__
- .byte $00 ; 234/ea _e^_circum_
- .byte $00 ; 235/eb _e"_dieres_
- .byte $00 ; 236/ec _i`_grave__
- .byte $00 ; 237/ed _i'_acute__
- .byte $00 ; 238/ee _i^_circum_
- .byte $00 ; 239/ef _i"_dieres_
- .byte $00 ; 240/f0 _o^x_Eth_s_
- .byte $00 ; 241/f1 _n~_tilda__
- .byte $00 ; 242/f2 _o`_grave__
- .byte $00 ; 243/f3 _o'_acute__
- .byte $00 ; 244/f4 _o^_circum_
- .byte $00 ; 245/f5 _o~_tilde__
- .byte $00 ; 246/f6 _o"_dieres_
- .byte $00 ; 247/f7 __divide___
- .byte $00 ; 248/f8 _o/_slash__
- .byte $00 ; 249/f9 _u`_grave__
- .byte $00 ; 250/fa _u'_acute__
- .byte $00 ; 251/fb _u^_circum_
- .byte $00 ; 252/fc _u"_dieres_
- .byte $00 ; 253/fd _y'_acute__
- .byte $00 ; 254/fe _sm_thorn__
- .byte $00 ; 255/ff _y"_dieres_
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 17.04.2003
-
-; void EnterDeskTop (void);
-
- .import _exit
- .export _EnterDeskTop
-
-_EnterDeskTop:
- lda #0
- tax
- jmp _exit
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void FirstInit (void);
-
- .export _FirstInit
-
- .include "../inc/jumptab.inc"
-
-_FirstInit = FirstInit
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 10.09.2001
-;
-; Plus4 and GEOS 1.1 detection by
-; Marco van den Heuvel, 2010-02-02
-;
-
-; unsigned char get_ostype (void);
-; unsigned char get_tv (void);
-
- .export _get_ostype
- .export _get_tv
- .importzp tmp1
-
- .include "../inc/const.inc"
- .include "../inc/geossym.inc"
- .include "../inc/geossym2.inc"
-
-_get_ostype:
- ldx #0
- lda version
- cmp #$a9
- beq geos11
- and #%11110000
- cmp #$10
- beq geos10
- lda c128Flag ; we're on at least 2.0
- cmp #$18
- beq geos_on_plus4
- ora version
- rts
-geos10:
- lda version
- rts
-geos11:
- lda #$11
- rts
-geos_on_plus4:
- lda #$04
- rts
-
-_get_tv:
- jsr _get_ostype
- cmp #$04
- beq plus4_get_tv
- bpl only40 ; C64 with 40 columns only
- lda graphMode
- bpl only40 ; C128 but currently on 40 columns
- ldx #1 ; COLUMNS80
- bne tvmode
-only40: ldx #0 ; COLUMNS40
-tvmode: ; PAL/NTSC check here, result in A
- php
- sei ; disable interrupts
- lda CPU_DATA ; this is for C64
- pha
- lda #IO_IN ; enable access to I/O
- sta CPU_DATA
- bit rasreg
- bpl tvmode ; wait for rasterline 127<x<256
- lda #24 ; (rasterline now >=256!)
-modelp:
- cmp rasreg ; wait for rasterline = 24 (or 280 on PAL)
- bne modelp
- lda grcntrl1 ; 24 or 280 ?
- bpl ntsc
- lda #0 ; PAL
- beq modeend
-ntsc:
- lda #$80 ; NTSC
-
-modeend:
- stx tmp1
- ora tmp1
- sta tmp1
- ldx #0
- pla
- sta CPU_DATA ; restore memory config
- plp ; restore interrupt state
- lda tmp1
- rts
-plus4_get_tv:
- ldx #1 ; Assume PAL
- bit $FF07 ; Test bit 6
- bvc plus4pal
- dex ; NTSC
-plus4pal:
- txa
- ldx #0
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.1999, 2.1.2003
-
-; char GetRandom (void);
-
- .export _GetRandom
-
- .include "../inc/jumptab.inc"
-
-_GetRandom:
- jsr GetRandom
- ldx #0
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; int GetSerialNumber (void);
-
- .export _GetSerialNumber
-
- .include "../inc/jumptab.inc"
- .include "../inc/geossym.inc"
-
-_GetSerialNumber:
-
- jsr GetSerialNumber
- lda r0L
- ldx r0H
- rts
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void InitForIO (void);
-; void DoneWithIO (void);
-
- .export _InitForIO, _DoneWithIO
-
- .include "../inc/jumptab.inc"
-
-_InitForIO = InitForIO
-
-_DoneWithIO = DoneWithIO
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.1999, 10.01.2003
-
-; void MainLoop (void);
-
- .export _MainLoop
-
- .include "../inc/jumptab.inc"
-
-_MainLoop = MainLoop
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void Panic (void);
-
- .export _Panic
-
- .include "../inc/jumptab.inc"
-
-_Panic = Panic
\ No newline at end of file
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void SetDevice (char newDeviceNumber);
-
- .export _SetDevice
-
- .include "../inc/jumptab.inc"
-
-_SetDevice = SetDevice
+++ /dev/null
-
-/*
- * systime.c
- *
- * Maciej 'YTM/Elysium' Witkowiak, 22.11.2002
- */
-
-#include <time.h>
-#include <geos.h>
-
-time_t _systime(void) {
-
-struct tm currentTime;
-
- currentTime.tm_sec = system_date.s_seconds;
- currentTime.tm_min = system_date.s_minutes;
- currentTime.tm_hour = system_date.s_hour;
- currentTime.tm_mday = system_date.s_day;
- currentTime.tm_mon = system_date.s_month;
- currentTime.tm_year = system_date.s_year;
- if (system_date.s_year < 87) {
- currentTime.tm_year+=100;
- }
- currentTime.tm_isdst = -1;
-
- return mktime(¤tTime);
-
-}
-
-clock_t clock(void) {
-
- return _systime();
-
-}
+++ /dev/null
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
- .export __sysuname, utsdata
-
- .import utscopy
-
- __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
- ; sysname
- .asciiz "cc65"
-
- ; nodename
- .asciiz ""
-
- ; release
- .byte ((.VERSION >> 8) & $0F) + '0'
- .byte '.'
- .byte ((.VERSION >> 4) & $0F) + '0'
- .byte $00
-
- ; version
- .byte (.VERSION & $0F) + '0'
- .byte $00
-
- ; machine
- .asciiz "GEOS"
-
-
-
+++ /dev/null
-
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void ToBASIC (void);
-
- .export _ToBASIC
-
- .include "../inc/jumptab.inc"
-
-_ToBASIC = ToBASIC
\ No newline at end of file