void _afailed (char* file, unsigned line)
{
-
ExitTurbo();
drawWindow.top = 0;
; Copy the data segment from the LOAD to the RUN location
;
- .export copydata
- .import __DATA_LOAD__, __DATA_RUN__, __DATA_SIZE__
- .include "geossym.inc"
- .include "jumptab.inc"
+ .export copydata
+ .import __DATA_LOAD__, __DATA_RUN__, __DATA_SIZE__
+
+ .include "geossym.inc"
+ .include "jumptab.inc"
copydata:
lda #<__DATA_SIZE__ ; no need to check if it is == 0
; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
;
- .export _memcpy
- .import _MoveData
+ .export _memcpy
+ .import _MoveData
-_memcpy = _MoveData
+_memcpy = _MoveData
; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
;
- .export _memmove
- .import _MoveData
+ .export _memmove
+ .import _MoveData
-_memmove = _MoveData
+_memmove = _MoveData
; Maciej 'YTM/Elysium' Witkowiak, 20.08.2003
;
- .export _memset, _bzero, __bzero
- .import _ClearRam, _FillRam
+ .export _memset, _bzero, __bzero
+ .import _ClearRam, _FillRam
-_bzero = _ClearRam
-__bzero = _ClearRam
-_memset = _FillRam
+_bzero = _ClearRam
+__bzero = _ClearRam
+_memset = _FillRam
; Zero the bss segment.
;
- .export zerobss
- .import __BSS_RUN__, __BSS_SIZE__
-
- .include "jumptab.inc"
- .include "geossym.inc"
+ .export zerobss
+ .import __BSS_RUN__, __BSS_SIZE__
+
+ .include "jumptab.inc"
+ .include "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
+ lda #<__BSS_SIZE__
+ ldx #>__BSS_SIZE__
+ sta r0L
+ stx r0H
+ lda #<__BSS_RUN__
+ ldx #>__BSS_RUN__
+ sta r1L
+ stx r1H
+ jmp ClearRam
S_OBJS += _scrsize.o \
cclear.o \
- chline.o \
- cvline.o \
cgetc.o \
+ chline.o \
clrscr.o \
color.o \
- cputc.o \
cpputs.o \
+ cputc.o \
cursor.o \
+ cvline.o \
gotoxy.o \
kbhit.o \
revers.o \
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 6.3.2001, 17.4.2003
- .include "geossym.inc"
+ .export xsize, ysize
+ .export screensize
+ .importz cursor_r, cursor_c
+ .import _cursor
+ .constructor initscrsize
+
+ .include "geossym.inc"
- .export xsize, ysize
- .export screensize
- .importzp cursor_r, cursor_c
- .import _cursor
- .constructor initscrsize
-
-.segment "INIT"
+.segment "INIT"
initscrsize:
.ifdef __GEOS_CBM__
- 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
+ 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
.else
- lda #70 ; 70 columns (more or less)
- sta xsize
- lda #23 ; something like that for Y size
+ lda #70 ; 70 columns (more or less)
+ sta xsize
+ lda #23 ; something like that for Y size
.endif
- sta ysize
- ldx #1
- stx cursor_r
- dex
- stx cursor_c
- txa
- jmp _cursor ; home and update cursor
-
-screensize:
- ldx xsize
- ldy ysize
+ 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
+xsize:
+ .res 1
+ysize:
+ .res 1
; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
; void cclear (unsigned char length);
+ .export _cclearxy, _cclear
+ .import popa, _gotoxy, fixcursor
+ .importzp cursor_x, cursor_y, cursor_c
+
.include "jumptab.inc"
.include "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
+ 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
+ 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
+ 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
+ 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
+ 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
+ lda #0 ; set pattern to clear
+ jsr SetPattern
+ jsr Rectangle
pla
- jsr SetPattern ; restore pattern
- jsr fixcursor
+ jsr SetPattern ; restore pattern
+ jsr fixcursor
L9: rts
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
_cgetc:
; show cursor if needed
- lda cursor_flag
- beq L0
+ 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
+ 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
+L0: jsr GetNextChar
+ tax
+ beq L0
+ pha
+ jsr PromptOff
+ pla
+ ldx #0
+ rts
; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
; void chline (unsigned char length);
+ .export _chlinexy, _chline
+ .import popa, _gotoxy, fixcursor
+ .importzp cursor_x, cursor_y, cursor_c
+
.include "jumptab.inc"
.include "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
+ 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
+ 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
+ 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
+ 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
+ adc cursor_c
+ sta cursor_c
+ sta r4L
+ ldx #r4
+ ldy #3
+ jsr DShiftLeft
+ lda #%11111111 ; pattern
+ jsr HorizontalLine
+ jsr fixcursor
L9: rts
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
; void clrscr (void);
.export _clrscr
+ .import fixcursor
+ .importzp cursor_c, cursor_r
.include "jumptab.inc"
.include "geossym.inc"
.include "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 #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
.ifdef __GEOS_CBM__
- lda #199
- sta r2H
- lda graphMode
- bpl L40
- lda #>639 ; 80 columns
- ldx #<639
- bne L99
-L40: lda #>319 ; 40 columns
- ldx #<319
+ lda #199
+ sta r2H
+ lda graphMode
+ bpl L40
+ lda #>639 ; 80 columns
+ ldx #<639
+ bne L99
+L40: lda #>319 ; 40 columns
+ ldx #<319
L99:
.else
- lda #191
- sta r2H
- lda #>559
- ldx #<559
+ lda #191
+ sta r2H
+ lda #>559
+ ldx #<559
.endif
- sta r4H
- stx r4L
- jsr Rectangle
- pla
- jmp SetPattern ; restore pattern
+ sta r4H
+ stx r4L
+ jsr Rectangle
+ pla
+ jmp SetPattern ; restore pattern
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
;
- .export _textcolor, _bgcolor, _bordercolor
+ .export _textcolor, _bgcolor, _bordercolor
; for GEOS 2.0 there is no color support, perhaps Wheels has it
_textcolor:
_bgcolor:
_bordercolor:
- rts
+ rts
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
; does not update cursor position
.export _cpputsxy, _cpputs
-
.import _gotoxy
.import popa
.importzp cursor_x, cursor_y
.include "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...
+ 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
+ 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
+L1: lda cursor_x
+ sta r11L
+ lda cursor_x+1
+ sta r11H
+ lda cursor_y
+ sta r1H
+ jmp PutString
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
; UPLINE = ?, KEY_UPARROW = GOTOY, ...
.export _cputcxy, _cputc, update_cursor
-
.import _gotoxy, fixcursor
.import popa
.import xsize,ysize
.include "jumptab.inc"
_cputcxy:
- pha ; Save C
- jsr popa ; Get Y
- jsr _gotoxy ; Set cursor, drop x
+ 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
+ cmp #$20
+ bcs L1
+ cmp #CR
+ beq do_cr
+ cmp #LF
+ beq do_lf
+ cmp #KEY_DELETE
+ bne L0
+ ldx #BACKSPACE
sec
- bcs L2
+ bcs L2
L0: rts
L1: clc
L2: php
- lda cursor_x
- sta r11L
- lda cursor_x+1
- sta r11H
- lda cursor_y
- sta r1H
+ lda cursor_x
+ sta r11L
+ lda cursor_x+1
+ sta r11H
+ lda cursor_y
+ sta r1H
txa
- jsr PutChar
+ jsr PutChar
plp
- bcs update_cursor
+ 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
+ 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
+ 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
+ sbc curHeight
+ sta r5L
+ lda #1 ; update cursor prompt position
+ sta r3L
+ jmp PosSprite
-do_cr: lda #0
- sta cursor_c
- beq update_cursor
+do_cr: lda #0
+ sta cursor_c
+ beq update_cursor
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
.export _cursor
.import update_cursor
.importzp cursor_flag
+
.include "jumptab.inc"
.include "geossym.inc"
_cursor:
tay ; onoff into Y
- ldx #0 ; High byte of result
- lda cursor_flag ; Get old value
+ ldx #0 ; High byte of result
+ lda cursor_flag ; Get old value
pha
- sty cursor_flag ; Set new value
+ sty cursor_flag ; Set new value
tya
- beq L1
- lda curHeight ; prepare cursor
- jsr InitTextPrompt
- jsr update_cursor ; place it on screen
+ beq L1
+ lda curHeight ; prepare cursor
+ jsr InitTextPrompt
+ jsr update_cursor ; place it on screen
L1: pla
rts
; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
; void cvline (unsigned char length);
+ .export _cvlinexy, _cvline
+ .import popa, _gotoxy, fixcursor
+ .importzp cursor_x, cursor_y, cursor_r
+
.include "jumptab.inc"
.include "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
+ 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
+_cvline:
+ cmp #0 ; Is the length zero?
+ beq L9 ; Jump if done
tax
- lda cursor_x ; x position
+ 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
+ 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
+ adc cursor_r
+ sta cursor_r
+ sta r3H
+ asl r3H
+ asl r3H
+ asl r3H
+ lda #%11111111 ; pattern
+ jsr VerticalLine
+ jsr fixcursor
L9: rts
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
.include "jumptab.inc"
-_gotox: sta cursor_c
- jmp fixcursor
+_gotox:
+ sta cursor_c
+ jmp fixcursor
-_gotoy: sta cursor_r
- inc cursor_r
- jmp fixcursor
+_gotoy:
+ sta cursor_r
+ inc cursor_r
+ jmp fixcursor
-_gotoxy: sta cursor_r
- inc cursor_r
- jsr popa
- sta cursor_c
+_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
+ 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
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
.include "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
+_kbhit:
+ ldx #0 ; High byte of result
+ lda pressFlag
+ rol ; Bit 7 is new key flag
+ txa ; A = 0
+ rol
+ rts
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
.include "const.inc"
_revers:
- tax
- bne L0 ; turn on
- lda #0
- .byte $2c
-L0: lda #SET_REVERSE
- sta tmp1
+ 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
+ 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
+ ldx #0
+ tya
+ beq L1
+ lda #1
+L1: rts
-
;
; Maciej 'YTM/Elysium' Witkowiak
;
.export _wherex, _wherey
.importzp cursor_c, cursor_r
-_wherex: lda cursor_c
- ldx #0
- rts
+_wherex:
+ lda cursor_c
+ ldx #0
+ rts
-_wherey: lda cursor_r
- ldx #0
- rts
+_wherey:
+ lda cursor_r
+ ldx #0
+ rts