├── makegeos.bat ├── bin ├── bswfont.bin ├── patterns.bin ├── unknown.bin └── input │ ├── koalapad.bin │ └── pcanalog.bin ├── c1541.in ├── inc ├── printdrv.inc ├── inputdrv.inc ├── diskdrv.inc ├── kernal.inc ├── equ.inc ├── geosmac.inc ├── geossym.inc └── const.inc ├── Makefile ├── COPYRIGHT ├── TODO ├── src ├── kernal │ ├── sprites.tas │ ├── memory.tas │ ├── icon.tas │ ├── math.tas │ ├── process.tas │ ├── mouseio.tas │ ├── menu.tas │ ├── conio.tas │ ├── system.tas │ ├── fonts.tas │ ├── dlgbox.tas │ ├── graph.tas │ ├── files.tas │ └── main.tas ├── input │ ├── amigamse.tas │ ├── mse1531.tas │ ├── lightpen.tas │ └── joydrv.tas ├── icons.tas ├── booter.tas └── lokernal.tas ├── CHANGES ├── geos.tas ├── README └── README.md /makegeos.bat: -------------------------------------------------------------------------------- 1 | @echo Compiling system 2 | acme geos.tas 3 | @echo Done. 4 | -------------------------------------------------------------------------------- /bin/bswfont.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ytmytm/c64-GEOS2000/HEAD/bin/bswfont.bin -------------------------------------------------------------------------------- /bin/patterns.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ytmytm/c64-GEOS2000/HEAD/bin/patterns.bin -------------------------------------------------------------------------------- /bin/unknown.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ytmytm/c64-GEOS2000/HEAD/bin/unknown.bin -------------------------------------------------------------------------------- /c1541.in: -------------------------------------------------------------------------------- 1 | format geosboot,00 d64 geosboot.d64 2 | write geoskern.puc geoskernal.prg 3 | quit -------------------------------------------------------------------------------- /bin/input/koalapad.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ytmytm/c64-GEOS2000/HEAD/bin/input/koalapad.bin -------------------------------------------------------------------------------- /bin/input/pcanalog.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ytmytm/c64-GEOS2000/HEAD/bin/input/pcanalog.bin -------------------------------------------------------------------------------- /inc/printdrv.inc: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS Printer Driver Jump Table 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;4-2-99 5 | 6 | ;jump table 7 | InitForPrint = $7900 8 | StartPrint = $7903 9 | PrintBuffer = $7906 10 | StopPrint = $7909 11 | GetDimensions = $790c 12 | PrinsASCII = $790f 13 | StartASCII = $7912 14 | SetNLQ = $7915 15 | -------------------------------------------------------------------------------- /inc/inputdrv.inc: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS Input Driver Jump Tab 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;4-2-99 5 | 6 | ;for C64 7 | ;MOUSE_JMP = $fe80 8 | SlowMouse = $fe83 9 | UpdateMouse = $fe86 10 | SetMouse = $fe89 11 | 12 | ;for C128 13 | ;MOUSE_JMP_128 = $fd00 14 | SlowMouse_128 = $fd03 15 | UpdateMouse_128 = $fd06 16 | SetMouse_128 = $fd09 17 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Make it all go round... 3 | # 4 | # Maciej Witkowiak 5 | 6 | all: 7 | @echo "Compiling system..." 8 | acme -vv geos.tas 9 | @echo "You now have geoskernal.bin file, we'll PUCrunch it..." 10 | pucrunch -f -c64 -x0x5000 geoskern.bin geoskern.puc 11 | @echo "And we'll try to make a .d64 image using c1541" 12 | c1541 /dev/null 13 | 14 | clean: 15 | rm geosboot.d64 16 | rm geoskern.* 17 | 18 | # a must! 19 | love: 20 | @echo "Not war, eh?" 21 | -------------------------------------------------------------------------------- /COPYRIGHT: -------------------------------------------------------------------------------- 1 | 2 | I don't know really what is the state of these sources. I may say 3 | that they belong to me because they are modified and reassigned. 4 | On the other hand they come from disassembling GEOS KERNAL code. 5 | However you will do nothing without orignal GEOS system because 6 | you can't do anything with kernal without DeskTop. 7 | 8 | Anyway, from my point of view they are free to use as long as I 9 | and Berkeley Softworks will be credited. 10 | 11 | Fell free, ACME is a GNU tool too. -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | 2 | code purity: 3 | - throughoutly test it with various configurations 4 | - cleanup code using !zone's 5 | - don't install REU cache code (drv1541.tas,drv1581.tas) if there's no REU 6 | 7 | code extensions: 8 | - upgrade DlgBox to use more than 16 files 9 | - allow to use +60K and RamCart simultaneousy (hell!) 10 | - allow to swap Kernal modules to/from expansion 11 | - disk cache (at least dir cache) (hell!) 12 | - try to rewrite 1571/81 to use Burst commands instead of turbodos (only on 13 | burst-enabled C64/128 in C64 mode - see Pasi Ojala's design) 14 | -------------------------------------------------------------------------------- /inc/diskdrv.inc: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS Disk Driver JumpTab 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;4-2-99 5 | 6 | ;pointers 7 | _InitForIO = $9000 8 | _DoneWithIO = $9002 9 | _ExitTurbo = $9004 10 | _PurgeTurbo = $9006 11 | _EnterTurbo = $9008 12 | _ChangeDiskDevice = $900a 13 | _NewDisk = $900c 14 | _ReadBlock = $900e 15 | _WriteBlock = $9010 16 | _VerWriteBlock = $9012 17 | _OpenDisk = $9014 18 | _GetBlock = $9016 19 | _PutBlock = $9018 20 | _GetDirHead = $901a 21 | _PutDirHead = $901c 22 | _GetFreeDirBlk = $901e 23 | _CalcBlksFree = $9020 24 | _FreeBlock = $9022 25 | _SetNextFree = $9024 26 | _FindBAMBit = $9026 27 | _NxtBlkAlloc = $9028 28 | _BlkAlloc = $902a 29 | _ChkDkGEOS = $902c 30 | _SetGEOSDisk = $902e 31 | 32 | ;jump table 33 | Get1stDirEntry = $9030 34 | GetNxtDirEntry = $9033 35 | GetBorder = $9036 36 | AddDirBlock = $9039 37 | ReadBuff = $903c 38 | WriteBuff = $903f 39 | ;??? = $9042 40 | ;??? = $9045 41 | AllocateBlock = $9048 42 | ReadLink = $904b 43 | -------------------------------------------------------------------------------- /src/kernal/sprites.tas: -------------------------------------------------------------------------------- 1 | 2 | ;sprites-related functions, handles all sprites (including pointer and prompt) 3 | 4 | ;17-8-99 - ACME port 5 | 6 | _DrawSprite 7 | LDY r3L 8 | LDA SprTabL,Y 9 | STA r5L 10 | LDA SprTabH,Y 11 | STA r5H 12 | LDY #63 13 | DSpr0 LDA (r4),Y 14 | STA (r5),Y 15 | DEY 16 | BPL DSpr0 17 | RTS 18 | 19 | _PosSprite 20 | +PushB CPU_DATA 21 | +LoadB CPU_DATA, IO_IN 22 | LDA r3L 23 | ASL 24 | TAY 25 | LDA r5L 26 | +addv VIC_Y_POS_OFF 27 | STA mob0ypos,Y 28 | LDA r4L 29 | +addv VIC_X_POS_OFF 30 | STA r6L 31 | LDA r4H 32 | ADC #0 33 | STA r6H 34 | LDA r6L 35 | STA mob0xpos,Y 36 | LDX r3L 37 | LDA BitMask2,X 38 | EOR #$FF 39 | AND msbxpos 40 | TAY 41 | LDA #1 42 | AND r6H 43 | BEQ PSpr0 44 | TYA 45 | ORA BitMask2,X 46 | TAY 47 | PSpr0 STY msbxpos 48 | +PopB CPU_DATA 49 | RTS 50 | 51 | _EnablSprite 52 | LDX r3L 53 | LDA BitMask2,X 54 | TAX 55 | +PushB CPU_DATA 56 | +LoadB CPU_DATA, IO_IN 57 | TXA 58 | ORA mobenble 59 | STA mobenble 60 | +PopB CPU_DATA 61 | RTS 62 | 63 | _DisablSprite 64 | LDX r3L 65 | LDA BitMask2,X 66 | EOR #$FF 67 | PHA 68 | LDX CPU_DATA 69 | +LoadB CPU_DATA, IO_IN 70 | PLA 71 | AND mobenble 72 | STA mobenble 73 | STX CPU_DATA 74 | RTS 75 | -------------------------------------------------------------------------------- /CHANGES: -------------------------------------------------------------------------------- 1 | - replaced bash script by a normal Makefile 2 | 18.02.2000 3 | - added .BAT for those without make 4 | - everything should work under MSDOS 8.3 names 5 | 29.02.2000 6 | - reordered conditionals to work properly with long values 7 | (TASM used shorts, so if !(condition) worked for false=$ff) 8 | - made booter.tas code shorter (faultDB if exp. not found is common) 9 | - removed REU section from memory.tas if REU not present 10 | 02.04.2000 11 | - added 1531 mouse driver in source 12 | 27.07.2000 13 | - cleaned up IO_IN and friends stuff, updated kernal sources with these constants 14 | 23.08.2000 15 | - fixed dir_track/sector bug in booter.tas, works with 1581, should work with any device now 16 | 30.08.2000 17 | - removed unneded NOP from Font_10 18 | 01.09.2000 19 | - little optimization in BitmapUp 20 | 22.09.2000 21 | - little optimization in GetScanLine 22 | 23.09.2000 23 | - fixes and cleanups to booter, removed ;xxxx from toplevel sources 24 | 24.09.2000 25 | - booter cleanups 26 | 01.02.2000 27 | - more ;xxxx removals 28 | 08.04.2001 29 | - added lightpen driver in source 30 | 17.07.2001 31 | - renamed ILin7 to its real meaning == ImprintLine 32 | 29.07.2001 33 | - added Amiga Mouse source driver 34 | 30.07.2001 35 | - reordered modules in geos.tas to remove drawing bug when RC128+2MHz were both enabled 36 | (note that this might introduce another hidden error, but this is unlikely) 37 | 18.08.2001 38 | - added option for much faster DialogBox routine 39 | 23.08.2001 40 | - little optimization of SmallPutChar 41 | 31.08.2001 42 | - more names instead of constants 43 | 03.08.2001 44 | - added 1581 source driver 45 | 07.03.2002 46 | - added 1571 source driver 47 | 08.03.2002 48 | - fixed bug reported by Nick Coplin (14.01.2002) -------------------------------------------------------------------------------- /src/input/amigamse.tas: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS Amiga style mouse input driver 3 | ;reassembled by Maciej 'YTM/Elysium' Witkowiak 4 | ;29.07.2001 5 | 6 | ;*=MOUSE_JMP 7 | 8 | MouseJMP JMP _MouseInit 9 | SlowMouse JMP _SlowMouse 10 | UpdateMouse JMP _UpdateMouse 11 | 12 | acceleration !byte 3 13 | 14 | fireLast !byte 0 15 | 16 | lastO !byte 1 17 | lastY !byte 1 18 | lastX !byte 1 19 | 20 | goingUp !byte $01,$03,$02 21 | goingDown !byte $00,$02,$03,$01 22 | 23 | 24 | _MouseInit LDA #8 25 | STA mouseXPos 26 | STA mouseYPos 27 | LDA #0 28 | STA mouseXPos+1 29 | STA menuNumber 30 | _SlowMouse RTS 31 | 32 | _UpdateMouse +bbrf MOUSEON_BIT, mouseOn, _SlowMouse 33 | +PushB CPU_DATA 34 | +LoadB CPU_DATA, IO_IN 35 | +PushB cia1base+3 36 | +PushB cia1base+1 37 | LDA mouseAccel 38 | LSR 39 | LSR 40 | LSR 41 | LSR 42 | STA acceleration 43 | +LoadB cia1base+3, $ff 44 | LDA cia1base+1 45 | AND #%00010000 46 | CMP fireLast 47 | BEQ cont 48 | STA fireLast 49 | LDA cia1base+1 50 | AND #%00010000 51 | BNE cont 52 | +smbf MOUSE_BIT, pressFlag 53 | ASL 54 | ASL 55 | ASL 56 | STA mouseData 57 | 58 | cont LDA cia1base+1 59 | TAY 60 | AND #%00000001 61 | STA lastO 62 | TYA 63 | AND #%00000100 64 | LSR 65 | ORA lastO 66 | TAX 67 | PHA 68 | CMP lastY 69 | BEQ hop1 70 | LDA lastY 71 | CMP goingDown,X 72 | BEQ goDown 73 | CMP goingUp,X 74 | BNE hop1 75 | 76 | goUp TXA 77 | PHA 78 | LDA mouseYPos 79 | +sub acceleration 80 | CMP #200 81 | BCC hophop1 82 | LDA #0 83 | JMP hophop1 84 | 85 | goDown TXA 86 | PHA 87 | LDA mouseYPos 88 | +add acceleration 89 | CMP #200 90 | BCC hophop1 91 | LDA #199 92 | 93 | hophop1 STA mouseYPos 94 | PLA 95 | TAX 96 | 97 | hop1 +PopB lastY 98 | 99 | ;OUSE_LR 100 | TYA 101 | AND #%00000010 102 | LSR 103 | STA lastO 104 | TYA 105 | AND #%00001000 106 | LSR 107 | LSR 108 | ORA lastO 109 | TAX 110 | PHA 111 | CMP lastX 112 | BEQ hop2 113 | LDA lastX 114 | CMP goingUp,X 115 | BEQ goUp2 116 | CMP goingDown,X 117 | BNE hop2 118 | 119 | goDown2 LDA mouseXPos 120 | +add acceleration 121 | STA mouseXPos 122 | LDA mouseXPos+1 123 | ADC #0 124 | STA mouseXPos+1 125 | BEQ hop2 126 | LDA mouseXPos 127 | CMP #$40 128 | BCC hop2 129 | LDA #$3F 130 | STA mouseXPos 131 | JMP hop2 132 | 133 | goUp2 LDA mouseXPos 134 | +sub acceleration 135 | STA mouseXPos 136 | LDA mouseXPos+1 137 | SBC #0 138 | STA mouseXPos+1 139 | BPL hop2 140 | +LoadW mouseXPos, 0 141 | 142 | hop2 +PopB lastX 143 | +PopB cia1base+1 144 | +PopB cia1base+3 145 | +PopB CPU_DATA 146 | RTS 147 | -------------------------------------------------------------------------------- /src/input/mse1531.tas: -------------------------------------------------------------------------------- 1 | 2 | ; this is 1531 mouse driver for GEOS 3 | ; reassembled by Maciej 'YTM/Elysium' Witkowiak 4 | ; 27.07.2000 5 | 6 | MouseJMP jmp _MouseInit 7 | SlowMouse jmp _SlowMouse 8 | UpdateMouse jmp _UpdateMouse 9 | SetMouse 10 | 11 | ;fe89 12 | tmpFire !byte 0 13 | mseX !byte 0 14 | mseY !byte 0 15 | 16 | _MouseInit +LoadW mouseXPos, 8 17 | +LoadB mouseYPos, 8 18 | _SlowMouse rts 19 | 20 | _UpdateMouse +bbsf MOUSEON_BIT, mouseOn, UM_1 21 | jmp UM_END 22 | 23 | UM_1 +PushB CPU_DATA 24 | +LoadB CPU_DATA, IO_IN 25 | +PushW cia1base+2 26 | +PushB cia1base+0 27 | +LoadW cia1base+2, 0 28 | 29 | lda cia1base+1 30 | and #$10 31 | cmp tmpFire 32 | beq UM_2 33 | sta tmpFire 34 | asl 35 | asl 36 | asl 37 | sta mouseData 38 | +smbf MOUSE_BIT, pressFlag 39 | 40 | UM_2 +LoadB cia1base+2, $ff 41 | +LoadB cia1base+0, $40 42 | ldx #$66 43 | UM_3 nop 44 | nop 45 | nop 46 | dex 47 | bne UM_3 48 | stx r1L 49 | 50 | lda sidbase+$19 51 | ldy mseX 52 | jsr CountDelta 53 | sty mseX 54 | cmp #0 55 | beq UM_5 56 | pha 57 | and #$80 58 | bne UM_4 59 | lda #$40 60 | UM_4 ora r1L 61 | sta r1L 62 | pla 63 | UM_5 +add mouseXPos+0 64 | sta mouseXPos+0 65 | txa 66 | adc mouseXPos+1 67 | sta mouseXPos+1 68 | 69 | lda sidbase+$1a 70 | ldy mseY 71 | jsr CountDelta 72 | sty mseY 73 | cmp #0 74 | beq UM_7 75 | pha 76 | and #$80 77 | lsr 78 | lsr 79 | lsr 80 | bne UM_6 81 | lda #$20 82 | UM_6 ora r1L 83 | sta r1L 84 | pla 85 | UM_7 sec 86 | eor #$ff 87 | adc mouseYPos 88 | sta mouseYPos 89 | php 90 | +CmpBI mouseYPos, 199 91 | bcc UM_8 92 | +LoadB mouseYPos, 199 93 | UM_8 plp 94 | txa 95 | eor #$ff 96 | adc #0 97 | cmp #$ff 98 | bne UM_9 99 | +LoadB mouseYPos, 0 100 | UM_9 lda r1L 101 | lsr 102 | lsr 103 | lsr 104 | lsr 105 | tax 106 | lda mseDirTab,x 107 | sta inputData 108 | +PopB cia1base 109 | +PopW cia1base+2 110 | +PopB CPU_DATA 111 | UM_END rts 112 | 113 | mseDirTab !byte $ff, $06, $02, $ff, $00, $07, $01, $ff 114 | !byte $04, $05, $03, $ff, $ff, $ff, $ff, $ff 115 | 116 | CountDelta sty r0L 117 | sta r0H 118 | ldx #0 119 | sec 120 | sbc r0L 121 | and #$7f 122 | cmp #$40 123 | bcs deltaNegative 124 | lsr 125 | beq deltaZero 126 | tay 127 | lda deltaTab-1,y 128 | ldy r0H 129 | rts 130 | deltaNegative ora #$c0 131 | cmp #$ff 132 | beq deltaZero 133 | sec 134 | ror 135 | eor #$ff 136 | tay 137 | lda deltaTab,y 138 | eor #$ff 139 | clc 140 | adc #1 141 | ldx #$ff 142 | ldy r0H 143 | rts 144 | deltaZero lda #0 145 | rts 146 | 147 | deltaTab !byte $01, $01, $02, $02, $03, $04, $06, $08 148 | !byte $09, $0b, $0d, $0f, $11, $13, $15, $19 149 | !byte $1d, $20, $23, $26, $29, $2c, $2f, $32 150 | !byte $35, $38, $3c, $41, $4b, $50, $5a, $64 151 | -------------------------------------------------------------------------------- /inc/kernal.inc: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS system variables 3 | ;by Maciej 'YTM/Elysium' Witkowiak 4 | ;19-3-99 5 | 6 | ;addresses defined so-so 7 | Z45 = $45 8 | Z46 = $46 9 | Z47 = $47 10 | 11 | z8b = $8b 12 | z8c = $8c 13 | z8d = $8d 14 | z8e = $8e 15 | z8f = $8f 16 | 17 | ;GEOS Kernal internal zpage vectors (not for use by apps) 18 | IconDescVec = $3f 19 | IconDescVecH = $40 20 | CallRLo = $41 21 | CallRHi = $42 22 | DBoxDesc = $43 23 | DBoxDescL = $43 24 | DBoxDescH = $44 25 | 26 | ;Commodore Kernal equations 27 | tapeBuffVec = $b2 28 | curScrLine = $d1 29 | curPos = $d3 30 | kbdQuePos = $c6 31 | kbdQue = $0277 32 | BASICMemBot = $0282 33 | BASICMemTop = $0284 34 | scrAddyHi = $0288 35 | PALNTSCFLAG = $02a6 36 | BASICspace = $0800 37 | BASIC_START = $a000 38 | curScrLineColor = $d8f0 39 | KERNALVecTab = $fd30 40 | KERNALCIAInit = $fda3 41 | KERNALVICInit = $ff81 42 | 43 | ;GEOS Kernal internal vars (not for use by apps) 44 | menuOptNumber = $86c0 45 | menuTop = $86c1 46 | menuBottom = $86c2 47 | menuLeft = $86c3 48 | menuRight = $86c5 49 | menuStackL = $86c7 50 | menuStackH = $86cb 51 | menuOptionTab = $86cf 52 | menuLimitTabL = $86d3 53 | menuLimitTabH = $86e2 54 | TimersTab = $86f1 55 | TimersCMDs = $8719 56 | TimersRtns = $872d 57 | TimersVals = $8755 58 | NumTimers = $877d 59 | DelaySP = $877e 60 | DelayValL = $877f 61 | DelayValH = $8793 62 | DelayRtnsL = $87a7 63 | DelayRtnsH = $87bb 64 | stringLen = $87cf 65 | stringMaxLen = $87d0 66 | tmpKeyVector = $87d1 67 | stringMargCtrl = $87d3 68 | GraphPenX = $87d4 69 | GraphPenXL = $87d4 70 | GraphPenXH = $87d5 71 | GraphPenY = $87d6 72 | KbdQueHead = $87d7 73 | KbdQueTail = $87d8 74 | KbdQueFlag = $87d9 75 | KbdQueue = $87da 76 | KbdNextKey = $87ea 77 | KbdDBncTab = $87eb 78 | KbdDMltTab = $87f3 79 | 80 | PrvCharWidth = $8807 81 | clkBoxTemp = $8808 82 | clkBoxTemp2 = $8809 83 | alarmWarnFlag = $880a 84 | tempIRQAcc = $880b 85 | defIconTab = $880c 86 | 87 | DeskAccPC = $8850 88 | DeskAccSP = $8852 89 | dlgBoxCallerPC = $8853 90 | dlgBoxCallerSP = $8855 91 | DBGFilesFound = $8856 92 | DBGFOffsLeft = $8857 93 | DBGFOffsTop = $8858 94 | DBGFNameTable = $8859 95 | DBGFTableIndex = $885b 96 | DBGFileSelected = $885c 97 | 98 | RecordDirTS = $8861 99 | RecordDirOffs = $8863 100 | RecordTableTS = $8865 101 | verifyFlag = $8867 102 | TempCurDrive = $8868 103 | 104 | ;GEOS BOOT and REU reboot adresses 105 | InitKernal = $5000 106 | BVBuff = $0400 107 | RunREU = $6000 108 | 109 | ;locations to be defined later 110 | E87FC = $87fc 111 | E87FD = $87fd 112 | E87FE = $87fe 113 | E87FF = $87ff 114 | E8800 = $8800 115 | A885D = $885d 116 | A885E = $885e 117 | A885F = $885f 118 | A8860 = $8860 119 | e88b7 = $88b7 ;4 bytes indexed by curDrive, 1571 disk type (SS/DS) 120 | A8FE8 = $8fe8 121 | A8FF0 = $8ff0 122 | 123 | ;RamExp stats block structure 124 | DACC_ST_ADDR = $80 ;deskAccessory load addy 125 | DACC_LGH = $82 ;deskAccessory lenght 126 | DTOP_CHNUM = $83 ;DeskTop # of chains 127 | RAM_EXP_1STFREE = $84 ;# of 1st free block 128 | DTOP_CHAIN = $85 ;# of DTop chains, (=6) up to $98 129 | 130 | -------------------------------------------------------------------------------- /src/kernal/memory.tas: -------------------------------------------------------------------------------- 1 | 2 | ;memory handling functions (copy, compare, move, fill) 3 | 4 | ;17-8-99 - ACME port 5 | 6 | _CopyString 7 | LDA #0 8 | _CopyFString STX CSSource 9 | STY CSDest 10 | TAX 11 | LDY #0 12 | CSSource = *+1 13 | CStril0 LDA (zpage),Y 14 | CSDest = *+1 15 | STA (zpage),Y 16 | BNE CStril1 17 | +beqx CStril2 18 | CStril1 INY 19 | BEQ CStril2 20 | +beqx CStril0 21 | DEX 22 | BNE CStril0 23 | CStril2 RTS 24 | 25 | _i_MoveData 26 | +PopW returnAddress 27 | JSR GetMDataDatas 28 | INY 29 | LDA (returnAddress),Y 30 | STA r2H 31 | JSR _MoveData 32 | PHP 33 | LDA #7 34 | JMP DoInlineReturn 35 | 36 | GetMDataDatas 37 | LDY #1 38 | LDA (returnAddress),Y 39 | STA r0L 40 | INY 41 | LDA (returnAddress),Y 42 | STA r0H 43 | INY 44 | LDA (returnAddress),Y 45 | STA r1L 46 | INY 47 | LDA (returnAddress),Y 48 | STA r1H 49 | INY 50 | LDA (returnAddress),Y 51 | STA r2L 52 | RTS 53 | 54 | _MoveData 55 | LDA r2L 56 | ORA r2H 57 | BEQ MData6 58 | +PushW r0 59 | +PushB r1H 60 | +PushB r2H 61 | +PushB r3L 62 | !if (REUPresent) { 63 | LDA sysRAMFlg 64 | BPL MData0 65 | +PushB r1H 66 | +LoadB r1H, 0 67 | STA r3L 68 | JSR StashRAM 69 | +PopB r0H 70 | +MoveB r1L, r0L 71 | JSR FetchRAM 72 | +bra MData5 73 | } 74 | MData0 +CmpW r0, r1 75 | MData1 BCS MData2 76 | BCC MData7 77 | MData2 LDY #0 78 | LDA r2H 79 | BEQ MData4 80 | MData3 LDA (r0),Y 81 | STA (r1),Y 82 | INY 83 | BNE MData3 84 | INC r0H 85 | INC r1H 86 | DEC r2H 87 | BNE MData3 88 | MData4 CPY r2L 89 | BEQ MData5 90 | LDA (r0),Y 91 | STA (r1),Y 92 | INY 93 | +bra MData4 94 | MData5 +PopB r3L 95 | +PopB r2H 96 | +PopB r1H 97 | +PopW r0 98 | MData6 RTS 99 | 100 | MData7 +AddB r2H, r0H 101 | +AddB r2H, r1H 102 | LDY r2L 103 | BEQ MData9 104 | MData8 DEY 105 | LDA (r0),Y 106 | STA (r1),Y 107 | TYA 108 | BNE MData8 109 | MData9 DEC r0H 110 | DEC r1H 111 | LDA r2H 112 | BEQ MData5 113 | MData10 DEY 114 | LDA (r0),Y 115 | STA (r1),Y 116 | TYA 117 | BNE MData10 118 | DEC r2H 119 | +bra MData9 120 | 121 | _CmpString 122 | LDA #0 123 | _CmpFString STX CMSSource 124 | STY CMSDest 125 | TAX 126 | LDY #0 127 | CMSSource = *+1 128 | CMStrl0 LDA (zpage),Y 129 | CMSDest = *+1 130 | CMP (zpage),Y 131 | BNE CMStrl2 132 | CMP #0 133 | BNE CMStrl1 134 | +beqx CMStrl2 135 | CMStrl1 INY 136 | BEQ CMStrl2 137 | +beqx CMStrl0 138 | DEX 139 | BNE CMStrl0 140 | LDA #0 141 | CMStrl2 RTS 142 | 143 | _ClearRam 144 | +LoadB r2L, NULL 145 | _FillRam LDA r0H 146 | BEQ CRam2 147 | LDA r2L 148 | LDY #0 149 | CRam1 STA (r1),Y 150 | DEY 151 | BNE CRam1 152 | INC r1H 153 | DEC r0H 154 | BNE CRam1 155 | CRam2 LDA r2L 156 | LDY r0L 157 | BEQ CRam4 158 | DEY 159 | CRam3 STA (r1),Y 160 | DEY 161 | CPY #$FF 162 | BNE CRam3 163 | CRam4 RTS 164 | 165 | _i_FillRam 166 | +PopW returnAddress 167 | JSR GetMDataDatas 168 | JSR _FillRam 169 | PHP 170 | LDA #6 171 | JMP DoInlineReturn 172 | -------------------------------------------------------------------------------- /inc/equ.inc: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS System various equations 3 | ;by Maciej 'YTM/Elysium' Witkowiak 4 | ;19-20,30.3, 3,5,18,20.4, 4.6, 17-19.8 5 | 6 | 7 | ;select the driver for the boot drive from the list: 8 | ;(only one value may be 'true') 9 | !set use1541 = true 10 | !set use1571 = false 11 | !set use1581 = false 12 | 13 | 14 | ;select generic input driver from the list: 15 | ;(only one value may be 'true') 16 | !set useJoystick = true ; classical digital joystick 17 | !set use1531 = false ; 1531 mouse 18 | !set useKoalaPad = false ; Koala Pad whatever it is... 19 | !set useLightPen = false ; lightpen (rocks!) 20 | !set usePCAnalogJoy = false ; analog PC joystick connected like paddles (kixx!) 21 | !set useAmigaMouse = false ; Amiga style mouse 22 | 23 | ;general code generation/optimization control: 24 | !set onlyVLIR = true ; only VLIR and SEQ supported 25 | !set removeToBASIC = true ; shorter code if you don't use BASIC rebooter 26 | 27 | 28 | ;RAM expansions configuration 29 | ;(only one value may be 'true', if all are false then REU is utililzed) 30 | !set usePlus60K = false ; for +60K expansion users 31 | !set useRamCart64 = false ; for Ram Cart 64K 32 | !set useRamCart128 = false ; for Ram Cart 128K 33 | 34 | 35 | ;runtime speedup 36 | !set use2MHz = false ; for 2MHz-on-border on C128 in 64 mode 37 | 38 | 39 | ;unsupported right now 40 | !set useParallel1541 = false ; parallel cable - (only 8 data lines, no handshake) 41 | ; all 1541 drives in system have to be parallel then 42 | 43 | ;Feel (almost) free to change values below: 44 | !set currentYear = 99 ;88 45 | !set currentMonth = 7 ;7 46 | !set currentDay = 3 ;6 47 | !set AMPM = 1 ;1 ; 0 - AM/1-PM 48 | !set currentHour = $14 ;1 ; BCD! 14:31 = $14/$31 49 | !set currentMinute = $11 ;0 ; BCD! 21:08 = $21/$08 50 | 51 | !set iniMaxMouseSpeed = $7f ; range from $00-$7f 52 | !set iniMinMouseSpeed = $1e ; 53 | !set iniMouseAccel = $7f ; 54 | 55 | !set currentInterleave = 8 ; 8 for 1541, 6 for 1571 56 | !set SelectFlashDelay = 10 ; 10 in 1/50 s 57 | !set SerialNumber = $1cd5 ; $1cd5 58 | 59 | ;makes drawing dialog boxes much faster, might cause visual mess 60 | ;takes more bytes 61 | !set speedupDlgBox = true 62 | 63 | !set oldMenu_5 = false ; bug - when false no blinking in menu 64 | 65 | ;if both menu separator patterns are null, then kernal menu code 66 | ;will be a bit optimized for speed and space 67 | !set menuVSeparator = %#.#.#.#. ; %10101010 ;both=0 -> speed&space 68 | !set menuHSeparator = %.#.#.#.# ; %01010101 69 | 70 | ;these are overriden by DeskTop, changing to null gives nothing 71 | !set backPattern1 = %.#.#.#.# ; %01010101 ;overriden by DeskTop 72 | !set backPattern2 = %#.#.#.#. ; %10101010 73 | 74 | ;better do not change below 75 | !set REUOsVarBackup = $7900 ; base for OS_VARS_LGH bytes for reboot 76 | !set REUDskDrvSPC = $8300 ; base for 4*DISK_DRV_LGH disk drivers 77 | 78 | ;do not change two values below - it's automatic 79 | !set useRamExp = usePlus60K | useRamCart64 | useRamCart128 80 | !if (useRamExp) { 81 | !set REUPresent = false 82 | } else { 83 | !set REUPresent = true 84 | } 85 | -------------------------------------------------------------------------------- /geos.tas: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS Kernal makefile 3 | ;by Maciej 'YTM/Elysium' Witkowiak 4 | ;19,20-3-99; 20-4; 6-6; 17-8 5 | ;27.07.2000 6 | 7 | ;This is makefile for GEOS KERNAL 8 | 9 | !to "geoskern.bin" 10 | !cpu 6502 11 | 12 | ;all GEOS Kernal equations... 13 | !source "inc/const.inc" 14 | !source "inc/geossym.inc" 15 | !source "inc/printdrv.inc" 16 | !source "inc/geosmac.inc" 17 | !source "inc/kernal.inc" 18 | !source "inc/diskdrv.inc" 19 | 20 | ;rules for compiling 21 | !source "inc/equ.inc" 22 | 23 | ;some other includes are needed if using binaries 24 | 25 | !if (!(useJoystick|use1531)) { 26 | !source "inc/inputdrv.inc" 27 | } 28 | 29 | ;GEOS startup code 30 | *=InitKernal 31 | !source "src/booter.tas" 32 | 33 | ;GEOS booting drive driver 34 | *=DISK_BASE 35 | !if (use1541) { 36 | !source "src/drv/drv1541.tas" 37 | } else { 38 | !if (use1571) { 39 | !source "src/drv/drv1571.tas" 40 | } else { 41 | !if (use1581) { 42 | !source "src/drv/drv1581.tas" 43 | } 44 | } 45 | } 46 | 47 | ;lower part of Kernal 48 | *=DISK_BASE + DISK_DRV_LGH 49 | !source "src/lokernal.tas" 50 | 51 | ;GEOS generic pointer shape, icons and Kernal code 52 | ;modules main, sprites, system, (?memory,?files,?process,?graph) 53 | ;have not to be under I/O space 54 | 55 | *=SCREEN_BASE+SC_SIZE 56 | !source "src/icons.tas" 57 | *=OS_ROM 58 | !source "src/kernal/main.tas" ; 59 | !source "src/kernal/math.tas" ; 60 | !source "src/kernal/memory.tas" ; 61 | !source "src/kernal/process.tas" ; 62 | !source "src/kernal/sprites.tas" ; 63 | !source "src/kernal/dlgbox.tas" ; 64 | 65 | ;-------------------------------------------- 66 | PatternTab !binary "bin/patterns.bin" ;~d000 67 | ;-------------------------------------------- 68 | ID100 !binary "bin/unknown.bin" ;~d100 69 | ;-------------------------------------------- 70 | BSWFont !binary "bin/bswfont.bin" ;~d210 71 | ;-------------------------------------------- 72 | 73 | !source "src/kernal/icon.tas" ; 74 | !source "src/kernal/fonts.tas" ; 75 | !source "src/kernal/conio.tas" ; 76 | !source "src/kernal/mouseio.tas" ; 77 | !source "src/kernal/graph.tas" ; 78 | !source "src/kernal/menu.tas" ; 79 | !source "src/kernal/files.tas" ; 80 | !source "src/kernal/system.tas" ; 81 | 82 | ;GEOS generic input driver (used in auto-execs, before DeskTop boots up) 83 | *=MOUSE_JMP 84 | 85 | !if (useJoystick) { 86 | !source "src/input/joydrv.tas" 87 | } else { 88 | !if (use1531) { 89 | !source "src/input/mse1531.tas" 90 | } else { 91 | !if (useKoalaPad) { 92 | !binary "bin/input/koalapad.bin" 93 | } else { 94 | !if (useLightPen) { 95 | !source "src/input/lightpen.tas" 96 | } else { 97 | !if (usePCAnalogJoy) { 98 | !binary "bin/input/pcanalog.bin" 99 | } else { 100 | !if (useAmigaMouse) { 101 | !source "src/input/amigamse.tas" 102 | } 103 | } 104 | } 105 | } 106 | } 107 | } 108 | 109 | -------------------------------------------------------------------------------- /src/input/lightpen.tas: -------------------------------------------------------------------------------- 1 | 2 | ; this is lightpen driver for GEOS 3 | ; reassembled by Maciej 'YTM/Elysium' Witkowiak 4 | ; 08.04.2001 5 | 6 | MouseJMP jmp _MouseInit 7 | SlowMouse jmp _SlowMouse 8 | UpdateMouse jmp _UpdateMouse 9 | SetMouse 10 | 11 | calibMark !byte 0 12 | xDelta !byte 0 13 | tmpFire !byte 0 14 | lphalfx !byte 0 15 | lpy !byte 0 16 | EFE8E !byte 0 ;fe8e 17 | 18 | _MouseInit +LoadB mouseXPos, 8 19 | sta mouseYPos 20 | +LoadB mouseXPos+1, 0 21 | +bbsf 7, calibMark, _SlowMouse 22 | sta menuNumber 23 | +LoadB calibMark, $ff 24 | lda #>_calibrate_db 25 | sta r0H 26 | lda #<_calibrate_db 27 | sta r0L 28 | ;+LoadW r0, _calibrate_db 29 | jsr DoDlgBox 30 | _SlowMouse rts 31 | 32 | _DrawLine ;+LoadW r0, _calbrate_gs 33 | lda #>_calibrate_gs 34 | sta r0H 35 | lda #<_calibrate_gs 36 | sta r0L 37 | jmp GraphicsString 38 | 39 | _calibrate_gs !byte NEWPATTERN, 1 40 | !byte MOVEPENTO 41 | !word $0082 42 | !byte $3c 43 | !byte RECTANGLETO 44 | !word $00be 45 | !byte $64 46 | !byte NEWPATTERN, 0 47 | !byte MOVEPENTO 48 | !word $00a0 49 | !byte $3e 50 | !byte RECTANGLETO 51 | !word $00a0 52 | !byte $62 53 | !byte NULL 54 | 55 | _DoCalibLP 56 | +bbsf MOUSEON_BIT, mouseData, DCLP_END 57 | ldx CPU_DATA 58 | +LoadB CPU_DATA, IO_IN 59 | lda lpxpos 60 | +subv $5c 61 | sta xDelta 62 | stx CPU_DATA 63 | DCLP_END rts 64 | 65 | _UpdateMouse +bbsf MOUSEON_BIT, mouseOn, UM_1 66 | jmp UM_END 67 | 68 | UM_1 +PushB CPU_DATA 69 | +LoadB CPU_DATA, IO_IN 70 | +PushW cia1base+2 71 | +PushB cia1base+0 72 | +LoadW cia1base+2, 0 73 | 74 | lda cia1base+1 75 | and #$04 76 | cmp tmpFire 77 | beq UM_2 78 | sta tmpFire 79 | asl 80 | asl 81 | asl 82 | asl 83 | asl 84 | sta mouseData 85 | +smbf MOUSE_BIT, pressFlag 86 | 87 | UM_2 lda menuNumber 88 | beq UM_3 89 | +MoveB mouseXPos+1, r0L 90 | lda mouseXPos 91 | ror r0L 92 | ror 93 | clc 94 | adc #12 95 | sta lphalfx 96 | lda mouseYPos 97 | +addv $32 98 | sta lpy 99 | UM_3 +LoadB EFE8E, 0 100 | lda lpxpos 101 | +sub xDelta 102 | ldx lphalfx 103 | jsr LPosNormalize 104 | stx lphalfx 105 | ora EFE8E 106 | sta EFE8E 107 | 108 | lda lpypos 109 | ldx lpy 110 | jsr LPosNormalize 111 | stx lpy 112 | ora EFE8E 113 | bne UM_END_POP 114 | 115 | ldx #0 116 | lda lphalfx 117 | asl 118 | bcc UM_4 119 | inx 120 | UM_4 stx mouseXPos+1 121 | sta mouseXPos 122 | +SubVW $18, mouseXPos 123 | lda lpy 124 | +subv $32 125 | sta mouseYPos 126 | 127 | UM_END_POP +PopB cia1base 128 | +PopW cia1base+2 129 | +PopB CPU_DATA 130 | UM_END rts 131 | 132 | LPosNormalize 133 | stx r0L 134 | tax 135 | +sub r0L 136 | bpl LPN_1 137 | eor #$ff 138 | +addv 1 139 | LPN_1 cmp #6 140 | beq LPN_2 141 | bcs LPN_END 142 | LPN_2 lda #0 143 | LPN_END rts 144 | 145 | _calibrate_db 146 | !byte DEF_DB_POS | 1 147 | !byte DBTXTSTR, $26, TXT_LN_1_Y 148 | !word _calibrate_db_txt 149 | !byte DB_USR_ROUT 150 | !word _DrawLine 151 | !byte DBOPVEC 152 | !word _DoCalibLP 153 | !byte OK, DBI_X_2, DBI_Y_2 154 | !byte NULL 155 | 156 | _calibrate_db_txt 157 | !text "Click on white vertical line" 158 | !byte NULL 159 | -------------------------------------------------------------------------------- /src/kernal/icon.tas: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS Icons handler 3 | 4 | ;17-8-99 - ACME port 5 | 6 | _DoIcons +MoveW r0, IconDescVec 7 | JSR Icons_1 8 | JSR ResetMseRegion 9 | LDA mouseOn 10 | AND #SET_MSE_ON 11 | BNE DoIcons1 12 | LDA mouseOn 13 | AND #%10111111 14 | STA mouseOn 15 | DoIcons1 LDA mouseOn 16 | ORA #SET_ICONSON 17 | STA mouseOn 18 | LDY #1 19 | LDA (IconDescVec),y 20 | STA r11L 21 | INY 22 | LDA (IconDescVec),y 23 | STA r11H 24 | INY 25 | LDA (IconDescVec),y 26 | TAY 27 | SEC 28 | JMP _StartMouseMode 29 | 30 | CalcIconDescTab ASL 31 | ASL 32 | ASL 33 | CLC 34 | ADC #4 35 | TAY 36 | RTS 37 | 38 | Icons_1 +LoadB r10L, NULL 39 | Icons_10 LDA r10L 40 | JSR CalcIconDescTab 41 | LDX #0 42 | Icons_11 LDA (IconDescVec),y 43 | STA r0,x 44 | INY 45 | INX 46 | CPX #6 47 | BNE Icons_11 48 | LDA r0L 49 | ORA r0H 50 | BEQ Icons_12 51 | JSR _BitmapUp 52 | Icons_12 INC r10L 53 | LDA r10L 54 | LDY #0 55 | CMP (IconDescVec),y 56 | BNE Icons_10 57 | Icons_13 RTS 58 | 59 | ProcessClick LDA IconDescVecH 60 | BEQ ProcClk1 61 | JSR FindClkIcon 62 | BCS ProcClk2 63 | ProcClk1 LDA otherPressVec 64 | LDX otherPressVec+1 65 | JMP CallRoutine 66 | ProcClk2 LDA clkBoxTemp 67 | BNE Icons_13 68 | LDA r0L 69 | STA clkBoxTemp2 70 | STY clkBoxTemp 71 | LDA #%11000000 72 | BIT iconSelFlg 73 | BEQ ProcClk5 74 | BMI ProcClk3 75 | BVS ProcClk4 76 | ProcClk3 JSR CalcIconCoords 77 | JSR MenuDoInvert 78 | +MoveB selectionFlash, r0L 79 | +LoadB r0H, NULL 80 | JSR _Sleep 81 | +MoveB clkBoxTemp2, r0L 82 | LDY clkBoxTemp 83 | ProcClk4 JSR CalcIconCoords 84 | JSR MenuDoInvert 85 | ProcClk5 LDY #$1e 86 | LDX #FALSE 87 | LDA dblClickCount 88 | BEQ ProcClk6 89 | LDX #TRUE 90 | LDY #0 91 | ProcClk6 STY dblClickCount 92 | STX r0H 93 | +MoveB clkBoxTemp2, r0L 94 | LDY clkBoxTemp 95 | LDX #0 96 | STX clkBoxTemp 97 | INY 98 | INY 99 | LDA (IconDescVec),y 100 | TAX 101 | DEY 102 | LDA (IconDescVec),y 103 | jmp CallRoutine 104 | 105 | FindClkIcon +LoadB r0L, NULL 106 | FndClkIcn1 LDA r0L 107 | JSR CalcIconDescTab 108 | LDA (IconDescVec),y 109 | INY 110 | ORA (IconDescVec),y 111 | BEQ FndClkIcn2 112 | INY 113 | LDA mouseXPos+1 114 | LSR 115 | LDA mouseXPos 116 | ROR 117 | LSR 118 | LSR 119 | SEC 120 | SBC (IconDescVec),y 121 | BCC FndClkIcn2 122 | INY 123 | INY 124 | CMP (IconDescVec),y 125 | BCS FndClkIcn2 126 | DEY 127 | LDA mouseYPos 128 | SEC 129 | SBC (IconDescVec),y 130 | BCC FndClkIcn2 131 | INY 132 | INY 133 | CMP (IconDescVec),y 134 | BCC FndClkIcn3 135 | FndClkIcn2 INC r0L 136 | LDA r0L 137 | LDY #0 138 | CMP (IconDescVec),y 139 | BNE FndClkIcn1 140 | CLC 141 | RTS 142 | FndClkIcn3 SEC 143 | RTS 144 | 145 | CalcIconCoords LDA (IconDescVec),y 146 | DEY 147 | DEY 148 | CLC 149 | ADC (IconDescVec),y 150 | +subv 1 151 | STA r2H 152 | LDA (IconDescVec),y 153 | STA r2L 154 | DEY 155 | LDA (IconDescVec),y 156 | STA r3L 157 | INY 158 | INY 159 | CLC 160 | ADC (IconDescVec),y 161 | STA r4L 162 | +LoadB r3H, 0 163 | STA r4H 164 | LDY #3 165 | LDX #r3 166 | JSR DShiftLeft 167 | LDY #3 168 | LDX #r4 169 | JSR DShiftLeft 170 | LDX #r4 171 | jmp Ddec 172 | -------------------------------------------------------------------------------- /src/kernal/math.tas: -------------------------------------------------------------------------------- 1 | 2 | ;various math routines 3 | 4 | ;17-8-99 - ACME port 5 | 6 | _DShiftLeft 7 | DEY 8 | BMI DShLf0 9 | ASL zpage,X 10 | ROL zpage+1,X 11 | JMP _DShiftLeft 12 | DShLf0 RTS 13 | _DShiftRight 14 | DEY 15 | BMI DShRg0 16 | LSR zpage+1,X 17 | ROR zpage,X 18 | JMP _DShiftRight 19 | DShRg0 RTS 20 | 21 | _BBMult 22 | LDA zpage,Y 23 | STA r8H 24 | STY r8L 25 | LDY #8 26 | LDA #0 27 | BBMul0 LSR r8H 28 | BCC BBMul1 29 | CLC 30 | ADC zpage,X 31 | BBMul1 ROR 32 | ROR r7L 33 | DEY 34 | BNE BBMul0 35 | STA zpage+1,X 36 | LDA r7L 37 | STA zpage,X 38 | LDY r8L 39 | RTS 40 | 41 | _BMult 42 | LDA #0 43 | STA zpage+1,Y 44 | _DMult +LoadB r8L, 16 45 | +LoadW r7, 0 46 | BMult0 LSR zpage+1,X 47 | ROR zpage,X 48 | BCC BMult1 49 | LDA r7L 50 | CLC 51 | ADC zpage,Y 52 | STA r7L 53 | LDA r7H 54 | ADC zpage+1,Y 55 | BMult1 LSR 56 | STA r7H 57 | ROR r7L 58 | ROR r6H 59 | ROR r6L 60 | DEC r8L 61 | BNE BMult0 62 | LDA r6L 63 | STA zpage,X 64 | LDA r6H 65 | STA zpage+1,X 66 | RTS 67 | 68 | _Ddiv 69 | +LoadW r8, 0 70 | +LoadB r9L, 16 71 | Ddivl0 ASL zpage,X 72 | ROL zpage+1,X 73 | ROL r8L 74 | ROL r8H 75 | LDA r8L 76 | SEC 77 | SBC zpage,Y 78 | STA r9H 79 | LDA r8H 80 | SBC zpage+1,Y 81 | BCC Ddivl1 82 | INC zpage,X 83 | STA r8H 84 | LDA r9H 85 | STA r8L 86 | Ddivl1 DEC r9L 87 | BNE Ddivl0 88 | Ddivl2 RTS 89 | 90 | _DSDiv 91 | LDA zpage+1,X 92 | EOR zpage+1,Y 93 | PHP 94 | JSR _Dabs 95 | STX r8L 96 | TYA 97 | TAX 98 | JSR _Dabs 99 | LDX r8L 100 | JSR _Ddiv 101 | PLP 102 | BPL Ddivl1 103 | jmp _Dnegate 104 | 105 | _Dabs 106 | LDA zpage+1,X 107 | BMI _Dnegate 108 | RTS 109 | _Dnegate LDA zpage+1,X 110 | EOR #$FF 111 | STA zpage+1,X 112 | LDA zpage,X 113 | EOR #$FF 114 | STA zpage,X 115 | INC zpage,X 116 | BNE Dnegate1 117 | INC zpage+1,X 118 | Dnegate1 RTS 119 | 120 | _Ddec 121 | LDA zpage,X 122 | BNE Ddecl0 123 | DEC zpage+1,X 124 | Ddecl0 DEC zpage,X 125 | LDA zpage,X 126 | ORA zpage+1,X 127 | RTS 128 | 129 | _GetRandom 130 | INC random 131 | BNE GRandl0 132 | INC random+1 133 | GRandl0 ASL random 134 | ROL random+1 135 | BCC GRandl2 136 | LDA #$0F 137 | +add random 138 | STA random 139 | BCC GRandl1 140 | INC random+1 141 | GRandl1 RTS 142 | GRandl2 +CmpBI random+1, $ff 143 | BCC GRandl3 144 | LDA random 145 | +subv $f1 146 | BCC GRandl3 147 | STA random 148 | LDA #0 149 | STA random+1 150 | GRandl3 RTS 151 | 152 | _CRC 153 | LDY #$ff 154 | STY r2L 155 | STY r2H 156 | INY 157 | CRC1 LDA #$80 158 | STA r3L 159 | CRC2 ASL r2L 160 | ROL r2H 161 | LDA (r0),y 162 | AND r3L 163 | BCC CRC3 164 | EOR r3L 165 | CRC3 BEQ CRC4 166 | LDA r2L 167 | EOR #$21 168 | STA r2L 169 | LDA r2H 170 | EOR #$10 171 | STA r2H 172 | CRC4 LSR r3L 173 | BCC CRC2 174 | INY 175 | BNE CRC5 176 | INC r0H 177 | CRC5 LDX #r1 178 | JSR Ddec 179 | LDA r1L 180 | ORA r1H 181 | BNE CRC1 182 | RTS 183 | 184 | ConvertBCD PHA 185 | AND #%11110000 186 | LSR 187 | LSR 188 | LSR 189 | LSR 190 | TAY 191 | PLA 192 | AND #%00001111 193 | CLC 194 | CvtBCD1 DEY 195 | BMI CvtBCD2 196 | ADC #10 197 | BNE CvtBCD1 198 | CvtBCD2 RTS 199 | -------------------------------------------------------------------------------- /src/input/joydrv.tas: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS joystick input driver 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;18.04.1999 5 | 6 | ;17.08.1999 - ACME port 7 | 8 | ;*=MOUSE_JMP 9 | 10 | MouseJMP JMP _MouseInit 11 | SlowMouse JMP _SlowMouse 12 | UpdateMouse JMP _UpdateMouse 13 | SetMouse 14 | 15 | joyStat0 !byte 0 16 | joyStat1 !byte 0 17 | joyStat2 !byte 0 18 | joyStat3 !byte 0 19 | joyStat4 !byte 0 20 | joyStat5 !byte 0 21 | joyStat6 !byte 0 22 | joyStat7 !byte 0 23 | 24 | _MouseInit 25 | JSR _SlowMouse 26 | STA joyStat2 27 | STA mouseXPos 28 | STA mouseXPos+1 29 | STA mouseYPos 30 | +LoadB inputData, $ff 31 | JMP JProc1_4 32 | 33 | _SlowMouse 34 | +LoadB mouseSpeed, NULL 35 | SlowMse0 RTS 36 | 37 | _UpdateMouse 38 | JSR JoyProc3 39 | +bbrf MOUSEON_BIT, mouseOn, SlowMse0 40 | JSR JoyProc1 41 | JSR JoyProc2 42 | LDY #0 43 | LDA joyStat4 44 | BPL UpdMse0 45 | DEY 46 | UpdMse0 STY r1H 47 | ASL 48 | ROL r1H 49 | ASL 50 | ROL r1H 51 | ASL 52 | ROL r1H 53 | +add joyStat1 54 | STA joyStat1 55 | LDA r1H 56 | ADC mouseYPos 57 | STA mouseYPos 58 | RTS 59 | 60 | JoyProc1 LDX inputData 61 | BMI JProc1_2 62 | +CmpB maxMouseSpeed, mouseSpeed 63 | BCC JProc1_1 64 | +AddB mouseAccel, joyStat2 65 | BCC JProc1_4 66 | INC mouseSpeed 67 | +bra JProc1_4 68 | JProc1_1 STA mouseSpeed 69 | JProc1_2 +CmpB minMouseSpeed, mouseSpeed 70 | BCS JProc1_3 71 | +SubB mouseAccel, joyStat2 72 | BCS JProc1_4 73 | DEC mouseSpeed 74 | +bra JProc1_4 75 | JProc1_3 STA mouseSpeed 76 | JProc1_4 LDX inputData 77 | BMI JProc1_5 78 | LDY mouseSpeed 79 | STY r0L 80 | JSR JoyProc4 81 | +MoveB r1H, joyStat3 82 | +MoveB r2H, joyStat4 83 | RTS 84 | JProc1_5 +LoadB joyStat3, 0 85 | STA joyStat4 86 | RTS 87 | 88 | JoyProc2 LDY #$ff 89 | LDA joyStat3 90 | BMI JProc2_1 91 | INY 92 | JProc2_1 STY r11H 93 | STY r12L 94 | ASL 95 | ROL r11H 96 | ASL 97 | ROL r11H 98 | ASL 99 | ROL r11H 100 | +add joyStat0 101 | STA joyStat0 102 | LDA r11H 103 | ADC mouseXPos 104 | STA mouseXPos 105 | LDA r12L 106 | ADC mouseXPos+1 107 | STA mouseXPos+1 108 | RTS 109 | 110 | JoyProc3 +LoadB cia1base, $ff 111 | LDA cia1base+1 112 | EOR #$ff 113 | CMP joyStat7 114 | STA joyStat7 115 | BNE JProc3_2 116 | AND #%00001111 117 | CMP joyStat6 118 | BEQ JProc3_1 119 | STA joyStat6 120 | TAY 121 | LDA JoyDirectionTab,y 122 | STA inputData 123 | +smbf INPUT_BIT, pressFlag 124 | JSR JProc1_4 125 | JProc3_1 LDA joyStat7 126 | AND #%00010000 127 | CMP joyStat5 128 | BEQ JProc3_2 129 | STA joyStat5 130 | ASL 131 | ASL 132 | ASL 133 | EOR #%10000000 134 | STA mouseData 135 | +smbf MOUSE_BIT, pressFlag 136 | JProc3_2 RTS 137 | 138 | JoyDirectionTab 139 | !byte $ff, $02, $06, $ff 140 | !byte $04, $03, $05, $ff 141 | !byte $00, $01, $07, $ff 142 | !byte $ff, $ff, $ff, $ff 143 | 144 | JoyProc4 LDA JoyTab1,x 145 | STA r1L 146 | LDA JoyTab1+2,x 147 | STA r2L 148 | LDA JoyTab2,x 149 | PHA 150 | LDX #r1 151 | LDY #r0 152 | JSR BBMult 153 | LDX #r2 154 | JSR BBMult 155 | PLA 156 | PHA 157 | BPL JProc4_1 158 | LDX #r1 159 | JSR Dnegate 160 | JProc4_1 PLA 161 | AND #%01000000 162 | BEQ JProc3_2 163 | LDX #r2 164 | jmp Dnegate 165 | 166 | JoyTab1 167 | !byte $ff, $b5, $00, $b5 168 | !byte $ff, $b5, $00, $b5 169 | !byte $ff, $b5 170 | JoyTab2 171 | !byte $00, $40, $40, $c0 172 | !byte $80, $80, $00, $00 173 | ;fffa 174 | -------------------------------------------------------------------------------- /src/icons.tas: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS System - lower part with some gfx data 3 | ;reassembled and decoded by Maciej 'YTM/Alliance' Witkowiak 4 | ;18-3-99 5 | 6 | ;17-8-99 - ACME port 7 | 8 | InitMsePic 9 | !byte %######.., %........, %........ 10 | !byte %#####..., %........, %........ 11 | !byte %####...., %........, %........ 12 | !byte %#####..., %........, %........ 13 | !byte %##.###.., %........, %........ 14 | !byte %#...###., %........, %........ 15 | !byte %.....###, %........, %........ 16 | !byte %......##, %........, %........ 17 | 18 | 19 | DBIcPicCANCEL 20 | !byte 5, %########, $80+2, %#######. 21 | !byte %#......., 4, %........, $80+2, %......## 22 | !byte %#......., 4, %........, $80+(9*6)+2, %......## 23 | ;%########, %########, %########, %########, %########, %#######. 24 | ;%#......., %........, %........, %........, %........, %......## 25 | ;%#......., %........, %........, %........, %........, %......## 26 | !byte %#....###, %##......, %........, %........, %........, %###...## ;1 27 | !byte %#...##.., %.##....., %........, %........, %........, %.##...## ;2 28 | !byte %#...##.., %.....###, %#..#####, %...####., %..####.., %.##...## ;3 29 | !byte %#...##.., %....##.., %##.###.#, %#.##..##, %.##..##., %.##...## ;4 30 | !byte %#...##.., %.....###, %##.##..#, %#.##...., %.##..##., %.##...## ;5 31 | !byte %#...##.., %....##.., %##.##..#, %#.##...., %.######., %.##...## ;6 32 | !byte %#...##.., %....##.., %##.##..#, %#.##...., %.##....., %.##...## ;7 33 | !byte %#...##.., %.##.##.., %##.##..#, %#.##..##, %.##..##., %.##...## ;8 34 | !byte %#....###, %##...###, %##.##..#, %#..####., %..####.., %.##...## ;9 35 | ;%#......., %........, %........, %........, %........, %......## 36 | ;%#......., %........, %........, %........, %........, %......## 37 | ;%########, %########, %########, %########, %########, %######## 38 | ;%.#######, %########, %########, %########, %########, %######## 39 | !byte %#......., 4, %........, $80+2, %......## 40 | !byte %#......., 4, %........, $80+1, %......## 41 | !byte 6, %########, $80+1, %.#######, 5, %######## 42 | 43 | DBIcPicOK 44 | !byte 5, %########, $80+2, %#######. 45 | !byte %#......., 4, %........, $80+2, %......## 46 | !byte %#......., 4, %........, $80+(9*6)+2, %......## 47 | ;%########, %########, %########, %########, %########, %#######. 48 | ;%#......., %........, %........, %........, %........, %......## 49 | ;%#......., %........, %........, %........, %........, %......## 50 | !byte %#......., %........, %#####..., %##...##., %........, %......## ;1 51 | !byte %#......., %.......#, %#...##.., %##..##.., %........, %......## ;2 52 | !byte %#......., %.......#, %#...##.., %##.##..., %........, %......## ;3 53 | !byte %#......., %.......#, %#...##.., %####...., %........, %......## ;4 54 | !byte %#......., %.......#, %#...##.., %###....., %........, %......## ;5 55 | !byte %#......., %.......#, %#...##.., %####...., %........, %......## ;6 56 | !byte %#......., %.......#, %#...##.., %##.##..., %........, %......## ;7 57 | !byte %#......., %.......#, %#...##.., %##..##.., %........, %......## ;8 58 | !byte %#......., %........, %#####..., %##...##., %........, %......## ;9 59 | ;%#......., %........, %........, %........, %........, %......## 60 | ;%#......., %........, %........, %........, %........, %......## 61 | ;%########, %########, %########, %########, %########, %######## 62 | ;%.#######, %########, %########, %########, %########, %######## 63 | !byte %#......., 4, %........, $80+2, %......## 64 | !byte %#......., 4, %........, $80+1, %......## 65 | !byte 6, %########, $80+1, %.#######, 5, %######## 66 | ;c000 67 | -------------------------------------------------------------------------------- /src/kernal/process.tas: -------------------------------------------------------------------------------- 1 | 2 | ;multitasking functions (processes, sleep, delays) 3 | 4 | ;17-8-99 - ACME port 5 | 6 | _InitProcesses 7 | LDX #0 8 | STX NumTimers 9 | STA r1L 10 | STA r1H 11 | TAX 12 | LDA #SET_FROZEN 13 | IProc0 STA TimersCMDs-1,X 14 | DEX 15 | BNE IProc0 16 | LDY #0 17 | IProc1 LDA (r0),Y 18 | STA TimersRtns,X 19 | INY 20 | LDA (r0),Y 21 | STA TimersRtns+1,X 22 | INY 23 | LDA (r0),Y 24 | STA TimersVals,X 25 | INY 26 | LDA (r0),Y 27 | STA TimersVals+1,X 28 | INY 29 | INX 30 | INX 31 | DEC r1H 32 | BNE IProc1 33 | +MoveB r1L, NumTimers 34 | RTS 35 | 36 | _ExecuteProcesses 37 | LDX NumTimers 38 | BEQ EProc2 39 | DEX 40 | EProc0 LDA TimersCMDs,X 41 | BPL EProc1 42 | AND #SET_BLOCKED 43 | BNE EProc1 44 | LDA TimersCMDs,X 45 | AND #SET_RUNABLE XOR $ff 46 | STA TimersCMDs,X 47 | TXA 48 | PHA 49 | ASL 50 | TAX 51 | LDA TimersRtns,X 52 | STA r0L 53 | LDA TimersRtns+1,X 54 | STA r0H 55 | JSR _DoExecProcess 56 | PLA 57 | TAX 58 | EProc1 DEX 59 | BPL EProc0 60 | EProc2 RTS 61 | _DoExecProcess 62 | JMP (r0) 63 | 64 | _ProcessTimers 65 | LDA #0 66 | TAY 67 | TAX 68 | CMP NumTimers 69 | BEQ PTime3 70 | PTime0 LDA TimersCMDs,X 71 | AND #SET_FROZEN | SET_NOTIMER 72 | BNE PTime2 73 | LDA TimersTab,Y 74 | BNE PTime1 75 | PHA 76 | LDA TimersTab+1,Y 77 | +subv 1 78 | STA TimersTab+1,Y 79 | PLA 80 | PTime1 +subv 1 81 | STA TimersTab,Y 82 | ORA TimersTab+1,Y 83 | BNE PTime2 84 | JSR RProc0 85 | LDA TimersCMDs,X 86 | ORA #SET_RUNABLE 87 | STA TimersCMDs,X 88 | PTime2 INY 89 | INY 90 | INX 91 | CPX NumTimers 92 | BNE PTime0 93 | PTime3 RTS 94 | 95 | _RestartProcess 96 | LDA TimersCMDs,X 97 | AND #(SET_BLOCKED | SET_FROZEN) XOR $ff 98 | STA TimersCMDs,X 99 | RProc0 TXA 100 | PHA 101 | ASL 102 | TAX 103 | LDA TimersVals,X 104 | STA TimersTab,X 105 | LDA TimersVals+1,X 106 | STA TimersTab+1,X 107 | PLA 108 | TAX 109 | RTS 110 | 111 | _EnableProcess 112 | LDA TimersCMDs,X 113 | ORA #SET_RUNABLE 114 | EnProc0 STA TimersCMDs,X 115 | RTS 116 | 117 | _BlockProcess 118 | LDA TimersCMDs,X 119 | ORA #SET_BLOCKED 120 | bne EnProc0 121 | _UnBlockProcess 122 | LDA TimersCMDs,X 123 | AND #SET_BLOCKED XOR $ff 124 | +bra EnProc0 125 | _FreezeProcess 126 | LDA TimersCMDs,X 127 | ORA #SET_FROZEN 128 | bne EnProc0 129 | _UnFreezeProcess 130 | LDA TimersCMDs,X 131 | AND #SET_FROZEN XOR $ff 132 | +bra EnProc0 133 | 134 | _ProcessDelays 135 | LDX DelaySP 136 | BEQ ProcDel3 137 | DEX 138 | ProcDel0 LDA DelayValL,X 139 | BNE ProcDel1 140 | ORA DelayValH,X 141 | BEQ ProcDel2 142 | DEC DelayValH,X 143 | ProcDel1 DEC DelayValL,X 144 | ProcDel2 DEX 145 | BPL ProcDel0 146 | ProcDel3 RTS 147 | 148 | 149 | _DoCheckDelays 150 | LDX DelaySP 151 | BEQ DChDl2 152 | DEX 153 | DChDl0 LDA DelayValL,X 154 | ORA DelayValH,X 155 | BNE DChDl1 156 | LDA DelayRtnsH,X 157 | STA r0H 158 | LDA DelayRtnsL,X 159 | STA r0L 160 | TXA 161 | PHA 162 | JSR _RemoveDelay 163 | JSR _DoExecDelay 164 | PLA 165 | TAX 166 | DChDl1 DEX 167 | BPL DChDl0 168 | DChDl2 RTS 169 | 170 | _DoExecDelay 171 | INC r0L 172 | BNE DEDe0 173 | INC r0H 174 | DEDe0 JMP (r0) 175 | 176 | _RemoveDelay 177 | PHP 178 | SEI 179 | RDel0 INX 180 | CPX DelaySP 181 | BEQ RDel1 182 | LDA DelayValL,X 183 | STA DelayValL-1,X 184 | LDA DelayValH,X 185 | STA DelayValH-1,X 186 | LDA DelayRtnsL,X 187 | STA DelayRtnsL-1,X 188 | LDA DelayRtnsH,X 189 | STA DelayRtnsH-1,X 190 | +bra RDel0 191 | RDel1 DEC DelaySP 192 | PLP 193 | RTS 194 | 195 | _Sleep PHP 196 | PLA 197 | TAY 198 | SEI 199 | LDX DelaySP 200 | LDA r0L 201 | STA DelayValL,X 202 | LDA r0H 203 | STA DelayValH,X 204 | PLA 205 | STA DelayRtnsL,X 206 | PLA 207 | STA DelayRtnsH,X 208 | INC DelaySP 209 | TYA 210 | PHA 211 | PLP 212 | RTS 213 | -------------------------------------------------------------------------------- /src/kernal/mouseio.tas: -------------------------------------------------------------------------------- 1 | 2 | ;almost all about mouse, menu & icon mouse handling is elsewhere 3 | 4 | ;17-8-99 - ACME port 5 | 6 | _IsMseInRegion 7 | LDA mouseYPos 8 | CMP r2L 9 | BCC IMIRl4 10 | CMP r2H 11 | BEQ IMIRl0 12 | BCS IMIRl4 13 | IMIRl0 LDA mouseXPos+1 14 | CMP r3H 15 | BNE IMIRl1 16 | LDA mouseXPos 17 | CMP r3L 18 | IMIRl1 BCC IMIRl4 19 | LDA mouseXPos+1 20 | CMP r4H 21 | BNE IMIRl2 22 | LDA mouseXPos 23 | CMP r4L 24 | IMIRl2 BEQ IMIRl3 25 | BCS IMIRl4 26 | IMIRl3 LDA #true 27 | RTS 28 | IMIRl4 LDA #false 29 | RTS 30 | 31 | 32 | _StartMouseMode 33 | BCC SMousMd1 34 | LDA r11L 35 | ORA r11H 36 | BEQ SMousMd1 37 | +MoveW r11, mouseXPos 38 | STY mouseYPos 39 | JSR SlowMouse 40 | SMousMd1 LDA #>CheckClickPos 41 | STA mouseVector+1 42 | LDA #DoMouseFault 45 | STA mouseFaultVec+1 46 | LDA #.value 16 | !if (>.value)!=(<.value) { 17 | lda #<.value } 18 | sta .dest+0 19 | } 20 | 21 | !macro MoveB .source, .dest { 22 | lda .source 23 | sta .dest 24 | } 25 | 26 | !macro MoveW .source, .dest { 27 | +MoveB .source+1, .dest+1 28 | +MoveB .source+0, .dest+0 29 | } 30 | 31 | !macro add .source { 32 | clc 33 | adc .source 34 | } 35 | 36 | !macro AddB .source, .dest { 37 | lda .source 38 | +add .dest 39 | sta .dest 40 | } 41 | 42 | !macro AddW .source, .dest { 43 | +AddB .source+0, .dest+0 44 | lda .source+1 45 | adc .dest+1 46 | sta .dest+1 47 | } 48 | 49 | !macro AddVB .value, .dest { 50 | lda .dest 51 | clc 52 | adc #.value 53 | sta .dest 54 | } 55 | 56 | !macro AddVW .value, .dest { 57 | +AddVB <.value, .dest+0 58 | !if (>.value)=0 { 59 | bcc .j 60 | inc .dest+1 61 | .j 62 | } else { 63 | lda #>.value 64 | adc .dest + 1 65 | sta .dest + 1 66 | } 67 | } 68 | 69 | !macro sub .source { 70 | sec 71 | sbc .source 72 | } 73 | 74 | !macro SubB .source, .dest { 75 | lda .dest 76 | +sub .source 77 | sta .dest 78 | } 79 | 80 | !macro SubW .source, .dest { 81 | +SubB .source+0, .dest+0 82 | lda .dest+1 83 | sbc .source+1 84 | sta .dest+1 85 | } 86 | 87 | !macro SubVW .value, .dest { 88 | sec 89 | lda .dest+0 90 | sbc #<.value 91 | sta .dest+0 92 | lda .dest+1 93 | sbc #>.value 94 | sta .dest+1 95 | } 96 | 97 | !macro CmpB .source, .dest { 98 | lda .source 99 | cmp .dest 100 | } 101 | 102 | !macro CmpBI .source, .immed { 103 | lda .source 104 | cmp #.immed 105 | } 106 | 107 | !macro CmpW .source, .dest { 108 | +CmpB .source+1, .dest+1 109 | bne .j 110 | +CmpB .source+0, .dest+0 111 | .j 112 | } 113 | 114 | !macro CmpWI .source, .immed { 115 | +CmpBI .source+1, >.immed 116 | bne .j 117 | +CmpBI .source+0, <.immed 118 | .j 119 | } 120 | 121 | !macro PushB .source { 122 | lda .source 123 | pha 124 | } 125 | 126 | !macro PushW .source { 127 | +PushB .source+1 128 | +PushB .source+0 129 | } 130 | 131 | !macro PopB .dest { 132 | pla 133 | sta .dest 134 | } 135 | 136 | !macro PopW .dest { 137 | +PopB .dest+0 138 | +PopB .dest+1 139 | } 140 | 141 | !macro bra .addr { 142 | clv 143 | bvc .addr 144 | } 145 | 146 | !macro smb .bitN, .dest { 147 | pha 148 | lda #1 << .bitN 149 | ora .dest 150 | sta .dest 151 | pla 152 | } 153 | 154 | !macro smbf .bitN, .dest { 155 | lda #1 << .bitN 156 | ora .dest 157 | sta .dest 158 | } 159 | 160 | !macro rmb .bitN, .dest { 161 | pha 162 | lda #(1 << .bitN) XOR $ff 163 | and .dest 164 | sta .dest 165 | pla 166 | } 167 | 168 | !macro rmbf .bitN, .dest { 169 | lda #(1 << .bitN) XOR $ff 170 | and .dest 171 | sta .dest 172 | } 173 | 174 | !macro bbs .bitN, .source, .addr { 175 | php 176 | pha 177 | lda .source 178 | and #1 << .bitN 179 | beq .j 180 | pla 181 | plp 182 | +bra .addr 183 | .j 184 | pla 185 | plp 186 | } 187 | 188 | !macro bbsf .bitN, .source, .addr { 189 | !if (.bitN = 7) { 190 | bit .source 191 | bmi .addr 192 | } else { 193 | !if (.bitN = 6) { 194 | bit .source 195 | bvs .addr 196 | } else { 197 | lda .source 198 | and #1 << .bitN 199 | bne .addr 200 | } 201 | } 202 | } 203 | 204 | !macro bbr .bitN, .source, .addr { 205 | php 206 | pha 207 | lda .source 208 | and #1 << .bitN 209 | bne .j 210 | pla 211 | plp 212 | +bra .addr 213 | .j 214 | pla 215 | plp 216 | } 217 | 218 | !macro bbrf .bitN, .source, .addr { 219 | !if (.bitN = 7) { 220 | bit .source 221 | bpl .addr 222 | } else { 223 | !if (.bitN = 6) { 224 | bit .source 225 | bvc .addr 226 | } else { 227 | lda .source 228 | and #1 << .bitN 229 | beq .addr 230 | } 231 | } 232 | } 233 | 234 | ;not part of original macro set 235 | ;03.03.1999 by Maciej Witkowiak 236 | 237 | !macro addv .value { 238 | clc 239 | adc #.value 240 | } 241 | 242 | !macro subv .value { 243 | sec 244 | sbc #.value 245 | } 246 | 247 | !macro bnex .addr { 248 | txa 249 | bne .addr 250 | } 251 | 252 | !macro beqx .addr { 253 | txa 254 | beq .addr 255 | } -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | 2 | 3 | GEOS KERNAL v2.0 - commented source code 4 | by Maciej 'YTM/Alliance' Witkowiak 5 | 6-6-99, 18-8-99, 18/29-2-00 6 | 7 | 8 | 9 | DESCRIPTION 10 | This archive contains FULL source code of GEOS KERNAL v2.0, english version. 11 | It is identical to original in critical points but the code is revised, 12 | optimized, reorganized and first steps towards modularizing are made. 13 | 14 | 15 | 16 | DISCLAIMER 17 | This package comes from full disassembling of GEOS KERNAL. I did it for my 18 | own pleasure and purposes in my spare time. It is meant for customizing the 19 | code and not for making big bucks on it. If you want to use GEOS KERNAL 20 | generated from these sources you need to have an original copy of GEOS, 21 | because you can do nothing without DeskTop, applications and so. 22 | 23 | Although I have throughly tested it I cannot guarantee that it will work on 24 | any hardware configuration and with any applications. 25 | 26 | 27 | 28 | REQUIREMENTS 29 | The only tool required is ACME (version at least 0.07). It may be obtained 30 | from: 31 | http://home.pages.de/~mac_bacon/acme/ 32 | Bash shell is helpful and existance of c1541 from VICE package will be good 33 | too. You will probably want to have pucrunch from 34 | http://www.cs.tut.fi/~albert/Dev/ 35 | Base distribution of these sources is intended for UNIX systems, but ACME in 36 | DOS will do too. 37 | To compile the kernel simply do 38 | make 39 | It will work flawlessly if you have c1541 and pucrunch. Anyway if you only 40 | have ACME make will stop after assembling the system and you will have 41 | geoskernal.bin file ready for loading into c64 and SYS $5000. 42 | 43 | 44 | CUSTOMIZATION 45 | 46 | Look into inc/equ.inc file - there are many true/false defines, you are free 47 | to change them. But read the comments. You can compile-in input and disk 48 | drivers so right after boot you will have your drivers (and you can boot from 49 | 1571/81 without any problems). In case that input driver is compiled into 50 | KERNAL you have to delete all input driver files from boot disk, because 51 | DeskTop will try to load the first one overriding compiled driver. 52 | If you have C128 it is worth to enable 2MHz support - CPU is warped into 2MHz 53 | on the border. This is better than add-on that I saw somewhere, because my 54 | version will not flicker anytime and that add-on will not work with this 55 | kernal. (not a single application that modifies GEOS KERNAL directly will not 56 | work). 57 | 58 | 59 | 60 | *NIX INSTALL 61 | 62 | Use Makefile for creating a binary file and a disk image with it. It will 63 | be placed on top of the source tree. 64 | 'geoskern.bin' is the binary file 65 | 'geoskern.puc' is the crunched binary (just RUN it) 66 | 'geosboot.d64' is the disk image 67 | 68 | If you don't have pucrunch simply move geoskernal.bin to c64 disk and treat it 69 | with any squeezer/cruncher. Even charpackers will be good. Let's say 70 | that you have crunched the KERNAL and saved the file as GEOS.PRG. From now on 71 | you can boot the system by simply loading and RUNning this file. 72 | 73 | To make a new boot disk: 74 | Prepare a blank disk, copy DeskTop, auto-execs (Configure etc.) there, 75 | your input driver (if it is different than that compiled into KERNAL), printer 76 | driver and whatever you want. Oops, I would have forget - of course copy your 77 | packed KERNAL there also. 78 | 79 | 80 | 81 | *NIX CLEAN 82 | 83 | make clean 84 | 85 | will remove all output files from the source tree. 86 | 87 | 88 | MS-DOS INSTALL 89 | 90 | Execute MAKEGEOS.BAT file, it will try to assemble the whole thing. I don't have pucrunch for 91 | DOS, so you will have uncompressed output file - geoskern.bin. Move it to a disk (image) and 92 | compress on c64 or execute - start and load address is $5000 - e.g. 93 | LOAD "GEOSKERN.BIN",8,1 94 | SYS20480 95 | 96 | 97 | THE SOURCES 98 | 99 | Source code is organized in a specific way. You can browse through it easier 100 | by using some keypoints: 101 | 102 | 1) Labels 103 | All global labels are identical to those from geosSym and geosMac files. All 104 | OS_JUMPTAB functions are preceded with '_'. For example EnterDeskTop is placed 105 | in jumptab as: 106 | EnterDeskTop JMP _EnterDeskTop 107 | (...) 108 | _EnterDeskTOp ; code for handling this function 109 | 110 | All other labels are meant to descript the purpose of a subroutine. It was not 111 | always possible, so you may find some UNK_xxx, xxxHelp_xx and lots of 112 | procedures with the same name but different number e.g. Font11, Font12 etc. 113 | In current version all labels are global and these which should be local are 114 | made by abbreviation of the subroutine with a number on its end. 115 | In future releases it will be fixed and named ACME !zone(s) will be used. 116 | 117 | 2) Indentation 118 | This goes like that: 119 | [tab2] [tab6] 120 | Label LDA #0 ;$xxxx 121 | 122 | CPU opcodes are always on 1st or 2nd tab. If it is 1st tab position, it means 123 | that the purpose of current/called subroutine/memory location is unknown. 124 | Comments are always on 6th tab position. The source is full of ;$xxxx 125 | comments. It is relict from disassembling the KERNAL - those marks helped me 126 | a lot when debugging. Currently the values there are wrong because code is 127 | optimized and reorganized. They will be removed in future releases. 128 | 129 | SOURCE TREE 130 | 131 | ./bin - all binary files goes there 132 | ./inc - all include files 133 | ./src - all source files 134 | 135 | subdirectories of ./bin and ./src 136 | ./drv - disk drivers code/binary 137 | ./input - input drivers code/binary 138 | 139 | Description of sources can be found at top of each file. 140 | 141 | 142 | 143 | COMMENTS 144 | Well, the sources are not yet commented very much, but the labels are very 145 | descriptive (as for me anyway). You should obtain the GEOS Programmer's 146 | Reference Book (by Alexander Boyce) for full description of all jumptab 147 | functions and many GEOS data structures. This document is available in text 148 | and HTML format from 149 | ftp.funet.fi/pub/cbm/[somewhere...] 150 | ftp.elysium.pl/tools/systems/geos/docs [or /programming] 151 | 152 | 153 | 154 | AUTHOR 155 | And reverse-engineer :} 156 | Maciej Witkowiak 157 | ytm@friko.onet.pl 158 | 159 | 160 | END WORDS 161 | Have fun! -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | GEOS KERNAL v2.0 - commented source code 4 | ======================================== 5 | by Maciej 'YTM/Elysium' Witkowiak 6 | 6-6-99, 18-8-99, 18/29-2-2000, 2014 7 | 8 | 9 | 10 | # DESCRIPTION 11 | This archive contains FULL source code of GEOS KERNAL v2.0, english version. 12 | It is identical to original in critical points but the code is revised, 13 | optimized, reorganized and first steps towards modularizing are made. 14 | 15 | 16 | 17 | # DISCLAIMER 18 | This package comes from full disassembling of GEOS KERNAL. I did it for my 19 | own pleasure and purposes in my spare time. It is meant for customizing the 20 | code and not for making big bucks on it. If you want to use GEOS KERNAL 21 | generated from these sources you need to have an original copy of GEOS, 22 | because you can do nothing without DeskTop, applications and so. 23 | 24 | Although I have throughly tested it I cannot guarantee that it will work on 25 | any hardware configuration and with any applications. 26 | 27 | 28 | 29 | # REQUIREMENTS 30 | The only tool required is ACME (version at least 0.07). It may be obtained 31 | from: 32 | http://sourceforge.net/projects/acme-crossass/ 33 | Bash shell is helpful and existance of c1541 from VICE package will be good 34 | too. You will probably want to have pucrunch from 35 | https://github.com/mist64/pucrunch 36 | Base distribution of these sources is intended for UNIX systems, but ACME in 37 | DOS will do too. 38 | To compile the kernel simply do 39 | ``` 40 | make 41 | ``` 42 | It will work flawlessly if you have c1541 and pucrunch. Anyway if you only 43 | have ACME make will stop after assembling the system and you will have 44 | geoskernal.bin file ready for loading into c64 and SYS $5000. 45 | 46 | 47 | # CUSTOMIZATION 48 | 49 | Look into inc/equ.inc file - there are many true/false defines, you are free 50 | to change them. But read the comments. You can compile-in input and disk 51 | drivers so right after boot you will have your drivers (and you can boot from 52 | 1571/81 without any problems). In case that input driver is compiled into 53 | KERNAL you have to delete all input driver files from boot disk, because 54 | DeskTop will try to load the first one overriding compiled driver. 55 | If you have C128 it is worth to enable 2MHz support - CPU is warped into 2MHz 56 | on the border. This is better than add-on that I saw somewhere, because my 57 | version will not flicker anytime and that add-on will not work with this 58 | kernal. (not a single application that modifies GEOS KERNAL directly will not 59 | work). 60 | 61 | 62 | 63 | # *NIX INSTALL 64 | 65 | Use Makefile for creating a binary file and a disk image with it. It will 66 | be placed on top of the source tree. 67 | 'geoskern.bin' is the binary file 68 | 'geoskern.puc' is the crunched binary (just RUN it) 69 | 'geosboot.d64' is the disk image 70 | 71 | If you don't have pucrunch simply move geoskernal.bin to c64 disk and treat it 72 | with any squeezer/cruncher. Even charpackers will be good. Let's say 73 | that you have crunched the KERNAL and saved the file as GEOS.PRG. From now on 74 | you can boot the system by simply loading and RUNning this file. 75 | 76 | To make a new boot disk: 77 | Prepare a blank disk, copy DeskTop, auto-execs (Configure etc.) there, 78 | your input driver (if it is different than that compiled into KERNAL), printer 79 | driver and whatever you want. Oops, I would have forget - of course copy your 80 | packed KERNAL there also. 81 | 82 | 83 | 84 | # *NIX CLEAN 85 | ``` 86 | make clean 87 | ``` 88 | will remove all output files from the source tree. 89 | 90 | 91 | # MS-DOS INSTALL 92 | 93 | Execute MAKEGEOS.BAT file, it will try to assemble the whole thing. I don't have pucrunch for 94 | DOS, so you will have uncompressed output file - geoskern.bin. Move it to a disk (image) and 95 | compress on c64 or execute - start and load address is $5000 - e.g. 96 | ``` 97 | LOAD "GEOSKERN.BIN",8,1 98 | SYS20480 99 | ``` 100 | 101 | # THE SOURCES 102 | 103 | Source code is organized in a specific way. You can browse through it easier 104 | by using some keypoints: 105 | 106 | ## 1) Labels 107 | All global labels are identical to those from geosSym and geosMac files. All 108 | OS_JUMPTAB functions are preceded with '_'. For example EnterDeskTop is placed 109 | in jumptab as: 110 | ``` 111 | EnterDeskTop JMP _EnterDeskTop 112 | (...) 113 | _EnterDeskTOp ; code for handling this function 114 | ``` 115 | 116 | All other labels are meant to descript the purpose of a subroutine. It was not 117 | always possible, so you may find some UNK_xxx, xxxHelp_xx and lots of 118 | procedures with the same name but different number e.g. Font11, Font12 etc. 119 | In current version all labels are global and these which should be local are 120 | made by abbreviation of the subroutine with a number on its end. 121 | In future releases it will be fixed and named ACME !zone(s) will be used. 122 | 123 | ## 2) Indentation 124 | This goes like that: 125 | ``` 126 | [tab2] [tab6] 127 | Label LDA #0 ;$xxxx 128 | ``` 129 | 130 | CPU opcodes are always on 1st or 2nd tab. If it is 1st tab position, it means 131 | that the purpose of current/called subroutine/memory location is unknown. 132 | Comments are always on 6th tab position. The source is full of ;$xxxx 133 | comments. It is relict from disassembling the KERNAL - those marks helped me 134 | a lot when debugging. Currently the values there are wrong because code is 135 | optimized and reorganized. They will be removed in future releases. 136 | 137 | # SOURCE TREE 138 | 139 | ./bin - all binary files goes there 140 | ./inc - all include files 141 | ./src - all source files 142 | 143 | subdirectories of ./bin and ./src 144 | ./drv - disk drivers code/binary 145 | ./input - input drivers code/binary 146 | 147 | Description of sources can be found at top of each file. 148 | 149 | 150 | 151 | # COMMENTS 152 | Well, the sources are not yet commented very much, but the labels are very 153 | descriptive (as for me anyway). You should obtain the GEOS Programmer's 154 | Reference Book (by Alexander Boyce) for full description of all jumptab 155 | functions and many GEOS data structures. This document is available in text 156 | and HTML format from 157 | ftp.funet.fi/pub/cbm/[somewhere...] 158 | ftp.elysium.pl/tools/systems/geos/docs [or /programming] 159 | 160 | 161 | 162 | # AUTHOR 163 | And reverse-engineer :} 164 | Maciej Witkowiak 165 | ytm@elysium.pl 166 | 167 | 168 | # END WORDS 169 | Have fun! 170 | -------------------------------------------------------------------------------- /inc/geossym.inc: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS variable memory locations sorted by address 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;4-2-99 5 | 6 | zpage = $00 7 | ; 8 | 9 | CPU_DDR = $00 10 | CPU_DATA = $01 11 | ; 12 | r0 = $02 13 | r0L = $02 14 | r0H = $03 15 | r1 = $04 16 | r1L = $04 17 | r1H = $05 18 | r2 = $06 19 | r2L = $06 20 | r2H = $07 21 | r3 = $08 22 | r3L = $08 23 | r3H = $09 24 | r4 = $0a 25 | r4L = $0a 26 | r4H = $0b 27 | r5 = $0c 28 | r5L = $0c 29 | r5H = $0d 30 | r6 = $0e 31 | r6L = $0e 32 | r6H = $0f 33 | r7 = $10 34 | r7L = $10 35 | r7H = $11 36 | r8 = $12 37 | r8L = $12 38 | r8H = $13 39 | r9 = $14 40 | r9L = $14 41 | r9H = $15 42 | r10 = $16 43 | r10L = $16 44 | r10H = $17 45 | r11 = $18 46 | r11L = $18 47 | r11H = $19 48 | r12 = $1a 49 | r12L = $1a 50 | r12H = $1b 51 | r13 = $1c 52 | r13L = $1c 53 | r13H = $1d 54 | r14 = $1e 55 | r14L = $1e 56 | r14H = $1f 57 | r15 = $20 58 | r15L = $20 59 | r15H = $21 60 | ; 61 | a0 = $fb 62 | a0L = $fb 63 | a0H = $fc 64 | a1 = $fd 65 | a1L = $fd 66 | a1H = $fe 67 | a2 = $70 68 | a2L = $70 69 | a2H = $71 70 | a3 = $72 71 | a3L = $72 72 | a3H = $73 73 | a4 = $74 74 | a4L = $74 75 | a4H = $75 76 | a5 = $76 77 | a5L = $76 78 | a5H = $77 79 | a6 = $78 80 | a6L = $78 81 | a6H = $79 82 | a7 = $7a 83 | a7L = $7a 84 | a7H = $7b 85 | a8 = $7c 86 | a8L = $7c 87 | a8H = $7d 88 | a9 = $7e 89 | a9L = $7e 90 | a9H = $7f 91 | 92 | ; 93 | 94 | curPattern = $22 95 | string = $24 96 | baselineOffset = $26 97 | curSetWidth = $27 98 | curHeight = $29 99 | curIndexTable = $2a 100 | cardDataPntr = $2c 101 | currentMode = $2e 102 | dispBufferOn = $2f 103 | mouseOn = $30 104 | msePicPtr = $31 105 | windowTop = $33 106 | windowBottom = $34 107 | leftMargin = $35 108 | rightMargin = $37 109 | pressFlag = $39 110 | mouseXPos = $3a 111 | mouseYPos = $3c 112 | returnAddress = $3d 113 | graphMode = $3f 114 | TURBO_DD00 = $8e ; from 1541 turbo 115 | TURBO_DD00_CPY = $8f ; from 1541 turbo 116 | STATUS = $90 117 | curDevice = $ba 118 | ; 119 | irqvec = $0314 120 | bkvec = $0316 121 | nmivec = $0318 122 | ; 123 | APP_RAM = $0400 124 | BACK_SCR_BASE = $6000 125 | PRINTBASE = $7900 126 | OS_VARS = $8000 127 | ; 128 | diskBlkBuf = $8000 129 | fileHeader = $8100 130 | curDirHead = $8200 131 | fileTrScTab = $8300 132 | dirEntryBuf = $8400 133 | DrACurDkNm = $841e 134 | DrBCurDkNm = $8430 135 | dataFileName = $8442 136 | dataDiskName = $8453 137 | PrntFilename = $8465 138 | PrntDiskName = $8476 139 | curDrive = $8489 140 | diskOpenFlg = $848a 141 | isGEOS = $848b 142 | interleave = $848c 143 | NUMDRV = $848d 144 | driveType = $848e 145 | _driveType = driveType-8 146 | turboFlags = $8492 147 | _turboFlags = turboFlags-8 148 | curRecord = $8496 149 | usedRecords = $8497 150 | fileWritten = $8498 151 | fileSize = $8499 152 | appMain = $849b 153 | intTopVector = $849d 154 | intBotVector = $849f 155 | mouseVector = $84a1 156 | keyVector = $84a3 157 | inputVector = $84a5 158 | mouseFaultVec = $84a7 159 | otherPressVec = $84a9 160 | StringFaultVec = $84ab 161 | alarmTmtVector = $84ad 162 | BRKVector = $84af 163 | RecoverVector = $84b1 164 | selectionFlash = $84b3 165 | alphaFlag = $84b4 166 | iconSelFlg = $84b5 167 | faultData = $84b6 168 | menuNumber = $84b7 169 | mouseTop = $84b8 170 | mouseBottom = $84b9 171 | mouseLeft = $84ba 172 | mouseRight = $84bc 173 | stringX = $84be 174 | stringY = $84c0 175 | mousePicData = $84c1 176 | maxMouseSpeed = $8501 177 | minMouseSpeed = $8502 178 | mouseAccel = $8503 179 | keyData = $8504 180 | mouseData = $8505 181 | inputData = $8506 182 | mouseSpeed = $8507 183 | random = $850a 184 | saveFontTab = $850c 185 | dblClickCount = $8515 186 | year = $8516 187 | month = $8517 188 | day = $8518 189 | hour = $8519 190 | minutes = $851a 191 | seconds = $851b 192 | alarmSetFlag = $851c 193 | sysDBData = $851d 194 | screencolors = $851e 195 | dlgBoxRamBuf = $851f ; to $8697 196 | ; 197 | ;$8698 - $8877 - various system data (keyboard queue, VLIR t&s, DBox, Menu, timers) 198 | ; 199 | savedmoby2 = $88bb 200 | scr80polar = $88bc 201 | scr80colors = $88bd 202 | vdcClrMode = $88be 203 | driveData = $88bf 204 | ramExpSize = $88c3 205 | sysRAMFlg = $88c4 206 | firstBoot = $88c5 207 | curType = $88c6 208 | ramBase = $88c7 209 | inputDevName = $88cb 210 | memBase = $88cf ;??? 211 | DrCCurDkNm = $88dc 212 | DrDCurDkNm = $88ee 213 | dir2Head = $8900 214 | ; 215 | SPRITE_PICS = $8a00 216 | spr0pic = $8a00 217 | spr1pic = $8a40 218 | spr2pic = $8a80 219 | spr3pic = $8ac0 220 | spr4pic = $8b00 221 | spr5pic = $8b40 222 | spr6pic = $8b80 223 | spr7pic = $8bc0 224 | COLOR_MATRIX = $8c00 225 | ; 226 | obj0Pointer = $8ff8 227 | obj1Pointer = $8ff9 228 | obj2Pointer = $8ffa 229 | obj3Pointer = $8ffb 230 | obj4Pointer = $8ffc 231 | obj5Pointer = $8ffd 232 | obj6Pointer = $8ffe 233 | obj7Pointer = $8fff 234 | ; 235 | DISK_BASE = $9000 236 | SCREEN_BASE = $a000 237 | OS_ROM = $c000 238 | OS_JUMPTAB = $c100 239 | EXP_BASE = $df00 240 | MOUSE_BASE_128 = $fd00 241 | MOUSE_JMP_128 = $fd00 242 | END_MOUSE_128 = $fe80 243 | MOUSE_BASE = $fe80 244 | MOUSE_JMP = $fe80 245 | config = $ff00 246 | END_MOUSE = $fffa 247 | NMI_VECTOR = $fffa 248 | RESET_VECTOR = $fffc 249 | IRQ_VECTOR = $fffe 250 | ; 251 | vicbase = $d000 252 | sidbase = $d400 253 | mmu = $d500 254 | VDC = $d600 255 | ctab = $d800 256 | cia1base = $dc00 257 | cia2base = $dd00 258 | ; 259 | mob0xpos = $d000 260 | mob0ypos = $d001 261 | mob1xpos = $d002 262 | mob1ypos = $d003 263 | mob2xpos = $d004 264 | mob2ypos = $d005 265 | mob3xpos = $d006 266 | mob3ypos = $d007 267 | mob4xpos = $d008 268 | mob4ypos = $d009 269 | mob5xpos = $d00a 270 | mob5ypos = $d00b 271 | mob6xpos = $d00c 272 | mob6ypos = $d00d 273 | mob7xpos = $d00e 274 | mob7ypos = $d00f 275 | msbxpos = $d010 276 | grcntrl1 = $d011 277 | rasreg = $d012 278 | lpxpos = $d013 279 | lpypos = $d014 280 | mobenble = $d015 281 | grcntrl2 = $d016 282 | grmemptr = $d018 283 | grirq = $d019 284 | grirqen = $d01a 285 | moby2 = $d017 286 | mobprior = $d01b 287 | mobmcm = $d01c 288 | mobx2 = $d01d 289 | mobmobcol = $d01e 290 | mobbakcol = $d01f 291 | extclr = $d020 292 | bakclr0 = $d021 293 | bakclr1 = $d022 294 | bakclr2 = $d023 295 | bakclr3 = $d024 296 | mcmclr0 = $d025 297 | mcmclr1 = $d026 298 | mob0clr = $d027 299 | mob1clr = $d028 300 | mob2clr = $d029 301 | mob3clr = $d02a 302 | mob4clr = $d02b 303 | mob5clr = $d02c 304 | mob6clr = $d02d 305 | mob7clr = $d02e 306 | keyreg = $d02f 307 | clkreg = $d030 308 | 309 | ; 310 | vdcreg = $d600 311 | vdcdata = $d601 312 | ; 313 | 314 | ;RamExpansions CR 315 | PLUS60K_CR = $d100 316 | RAMC_BASE = $de00 317 | RAMC_WINDOW = $df00 318 | -------------------------------------------------------------------------------- /src/booter.tas: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS Kernal - booter code 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;19,20-3-99; 5 | ;4.4 - custom expansions on-boot tests (not tested) 6 | ;5.4 - DeskTop ram loader 7 | ;20.4 - DB if DeskTop not found (no DT reboot - bug somewhere) 8 | 9 | ;17.8 - ACME port 10 | ;21.8.2000 - fixed directory position bug (bootTr2) 11 | ;22.9.2000 - macros, conditionale fixes 12 | 13 | SEI 14 | CLD 15 | LDX #$ff 16 | TXS 17 | +LoadB CPU_DATA, RAM_64K 18 | LDA #<_NMIHandler 19 | STA $fffa 20 | STA $fffc 21 | STA $fffe 22 | LDA #>_NMIHandler 23 | STA $fffb 24 | STA $fffd 25 | STA $ffff 26 | JSR ClrScr 27 | JSR i_FillRam 28 | !word $0500 29 | !word dirEntryBuf 30 | !byte 0 31 | JSR FirstInit 32 | JSR MOUSE_JMP 33 | +LoadB interleave, currentInterleave 34 | LDY curDevice 35 | !if (use1541) { 36 | LDA #DRV_1541 37 | } else { 38 | !if (use1571) { 39 | LDA #DRV_1571 40 | } else { 41 | !if (use1581) { 42 | LDA #DRV_1581 43 | }}} 44 | STA _driveType,y 45 | STY curDrive 46 | !if (REUPresent) { 47 | LDX #0 48 | LDA $5f0f 49 | CMP #$13 50 | BNE Boot2 51 | LDY #3 52 | Boot1 LDA $5f06,y 53 | CMP bootTest,y 54 | BNE Boot2 55 | DEY 56 | BPL Boot1 57 | } 58 | LDX #$80 59 | Boot2 TXA 60 | STA firstBoot 61 | BEQ Boot4 62 | !if (REUPresent) { 63 | LDY #2 64 | Boot3 LDA $5f18,y 65 | STA year,y 66 | DEY 67 | BPL Boot3 68 | +MoveB $5f12, sysRAMFlg 69 | +bra Boot6 70 | } 71 | Boot4 +LoadB CPU_DATA, IO_IN 72 | LDA cia1base+15 73 | AND #%01111111 74 | STA cia1base+15 75 | +LoadB cia1base+11, currentHour | (AMPM << 7) 76 | +LoadB cia1base+10, currentMinute 77 | +LoadW cia1base+8, 0 78 | +LoadB CPU_DATA, $30 79 | +LoadB year, currentYear 80 | +LoadB month, currentMonth 81 | +LoadB day, currentDay 82 | LDX #7 83 | LDA #$bb 84 | Boot5 STA A8FE8,x 85 | DEX 86 | BPL Boot5 87 | +LoadB A8FF0, $bf 88 | Boot6 LDA #>_IRQHandler 89 | STA $ffff 90 | LDA #<_IRQHandler 91 | STA $fffe 92 | !if (use2MHz) { 93 | +LoadB rasreg, $fc 94 | } 95 | !if (useRamCart64 | useRamCart128) { 96 | +LoadB CPU_DATA, IO_IN 97 | +LoadW RAMC_BASE, 0 98 | ldx RAMC_WINDOW 99 | ldy RAMC_WINDOW+$80 100 | lda #"M" 101 | sta RAMC_WINDOW 102 | lda #"W" 103 | sta RAMC_WINDOW+$80 104 | cmp RAMC_WINDOW+$80 105 | bne BootNotRC 106 | lda RAMC_WINDOW 107 | cmp #"M" 108 | bne BootNotRC 109 | stx RAMC_WINDOW 110 | sty RAMC_WINDOW 111 | jmp BootRC_OK 112 | BootNotRC +LoadB CPU_DATA, $30 113 | lda #>ExpFaultDB 114 | sta r0H 115 | lda #ExpFaultDB 134 | sta r0H 135 | lda #_EnterDeskTop 163 | STA EnterDeskTop+2 164 | LDA #<_EnterDeskTop 165 | STA EnterDeskTop+1 166 | !if (useRamExp) { 167 | jsr LoadDeskTop 168 | } 169 | JMP _EnterDeskTop 170 | 171 | Boot10 +MoveB r1H, bootSec 172 | +MoveB r1L, bootTr 173 | +LoadW r4, diskBlkBuf 174 | JSR GetBlock 175 | +bnex Boot9 176 | +MoveB diskBlkBuf+1, bootSec2 177 | +MoveB diskBlkBuf, bootTr2 178 | Boot101 LDY bootOffs 179 | LDA diskBlkBuf+2,y 180 | BEQ Boot11 181 | LDA diskBlkBuf+$18,y 182 | CMP #AUTO_EXEC 183 | BEQ Boot12 184 | Boot11 +AddVB 32, bootOffs 185 | BNE Boot101 186 | BEQ Boot8 187 | Boot12 LDX #0 188 | Boot13 LDA diskBlkBuf+2,y 189 | STA dirEntryBuf,x 190 | INY 191 | INX 192 | CPX #30 193 | BNE Boot13 194 | +LoadW r9, dirEntryBuf 195 | +LoadB r0, 0 196 | LDA #>_BootEnterDeskTop 197 | STA EnterDeskTop+2 198 | LDA #<_BootEnterDeskTop 199 | STA EnterDeskTop+1 200 | LDA #>_EnterDeskTop-1 201 | PHA 202 | LDA #<_EnterDeskTop-1 203 | PHA 204 | LDA #>_FirstInit-1 205 | PHA 206 | LDA #<_FirstInit-1 207 | PHA 208 | JMP LdApplic 209 | 210 | _BootEnterDeskTop 211 | SEI 212 | CLD 213 | LDX #$ff 214 | TXS 215 | JSR _DoFirstInitIO 216 | JSR InitGEOEnv 217 | JMP Boot8 218 | 219 | !if (usePlus60K) { 220 | Plus60KTest 221 | ldx #0 222 | stx PLUS60K_CR 223 | ldy $1180 224 | +LoadB $1180, ("M") 225 | +LoadB PLUS60K_CR, $80 226 | lda $1180 227 | stx PLUS60K_CR 228 | sty $1180 229 | cmp #"M" 230 | rts 231 | Plus60KTestEnd 232 | } 233 | 234 | !if (useRamExp) { 235 | LoadDeskTop +LoadB a0L, NULL 236 | +LoadB BVChainTab, 1 ;1 - first free 237 | LoadDTLp lda #>DeskTopName 238 | sta r6H 239 | lda #LoadDT_DB 244 | sta r0H 245 | lda #DeskTopName 262 | sta r0H 263 | lda #BVBuff) 276 | tay 277 | ldx a0L 278 | bne BLoadDTop_1 279 | sty DeskTopLgh 280 | BLoadDTop_1 clc 281 | adc BVChainTab,x 282 | adc #1 283 | sta BVChainTab+1,x 284 | inc a0L 285 | 286 | +LoadB r1H, 0 287 | lda BVChainTab,x 288 | sta r1L 289 | +LoadW r0, BVBuff 290 | sty r2H 291 | jsr RamExpWrite 292 | 293 | +LoadB CPU_DATA, IO_IN 294 | inc $d020 295 | +LoadB CPU_DATA, $30 296 | jmp BLoadDTop 297 | 298 | BVLast jsr RamExpGetStat 299 | +MoveB a0L, diskBlkBuf+DTOP_CHNUM 300 | inc a0L 301 | ldx #0 302 | BVLast_1 lda BVChainTab,x 303 | sta diskBlkBuf+DTOP_CHAIN,x 304 | inx 305 | cpx a0L 306 | bne BVLast_1 307 | sta diskBlkBuf+RAM_EXP_1STFREE 308 | +LoadB DeskTopOpen, 0 309 | jmp RamExpPutStat 310 | } 311 | 312 | bootTr !byte 0 313 | bootSec !byte 0 314 | bootTr2 !byte DIR_TRACK 315 | bootSec2 !byte 1 316 | bootOffs !byte $e0 317 | 318 | bootTest !text "GEOS" 319 | 320 | !if (useRamExp) { 321 | LoadDT_DB 322 | !byte DEF_DB_POS | 1 323 | !byte DBTXTSTR, TXT_LN_X, TXT_LN_1_Y+6 324 | !word LoadDT_Str0 325 | !byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y+6 326 | !word LoadDT_Str1 327 | !byte OK, DBI_X_2, DBI_Y_2 328 | !byte NULL 329 | 330 | LoadDT_Str0 !text BOLDON, "Please insert a disk", NULL 331 | LoadDT_Str1 !text "with deskTop V1.5 or higher", NULL 332 | 333 | ExpFaultDB !byte DEF_DB_POS | 1 334 | !byte DBTXTSTR, TXT_LN_X, TXT_LN_1_Y 335 | !word ExpFaultStr 336 | !byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y 337 | !word ExpFaultStr2 338 | !byte OK, DBI_X_1, DBI_Y_2 339 | !byte NULL 340 | 341 | ExpFaultStr !byte BOLDON 342 | !text "This version of GEOS works", NULL 343 | ExpFaultStr2 344 | !if (useRamCart64 | useRamCart128) { 345 | !text "only with RamCart expansion.", NULL 346 | } 347 | !if (usePlus60K) { 348 | !text "only with +60K expansion.", NULL 349 | } 350 | 351 | } 352 | 353 | BVChainTab 354 | -------------------------------------------------------------------------------- /src/lokernal.tas: -------------------------------------------------------------------------------- 1 | 2 | ;GEOS System KERNAL - lower part, placed after disk driver 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;18-3-99, 3.4 5 | 6 | ;4.4 - ram expansions read/write procs (+60K not tested) 7 | 8 | ;17.8.99 - ACME port 9 | 10 | ;*=DISK_BASE + DISK_DRV_LGH 11 | 12 | LoKernal +AddVW 2, r6 13 | LoKern0 RTS 14 | 15 | _ReadFile 16 | JSR EnterTurbo 17 | +bnex LoKern0 18 | JSR InitForIO 19 | +PushW r0 20 | +LoadW r4, diskBlkBuf 21 | +LoadB r5L, 2 22 | +MoveW r1, fileTrScTab+2 23 | RdFile1 JSR ReadBlock 24 | +bnex RdFile6 25 | LDY #$fe 26 | LDA diskBlkBuf 27 | BNE RdFile2 28 | LDY diskBlkBuf+1 29 | DEY 30 | BEQ RdFile5 31 | RdFile2 LDA r2H 32 | BNE RdFile3 33 | CPY r2L 34 | BCC RdFile3 35 | BEQ RdFile3 36 | LDX #BFR_OVERFLOW 37 | BNE RdFile6 38 | RdFile3 STY r1L 39 | +LoadB CPU_DATA, RAM_64K 40 | RdFile4 LDA diskBlkBuf+1,y 41 | DEY 42 | STA (r7),y 43 | BNE RdFile4 44 | +LoadB CPU_DATA, KRNL_IO_IN 45 | +AddB r1L, r7L 46 | BCC *+4 47 | INC r7H 48 | +SubB r1L, r2L 49 | BCS *+4 50 | DEC r2H 51 | RdFile5 INC r5L 52 | INC r5L 53 | LDY r5L 54 | +MoveB diskBlkBuf+1, r1H 55 | STA fileTrScTab+1,y 56 | +MoveB diskBlkBuf, r1L 57 | STA fileTrScTab,y 58 | BNE RdFile1 59 | LDX #0 60 | RdFile6 +PopW r0 61 | JMP DoneWithIO 62 | 63 | FlaggedPutBlock LDA verifyFlag 64 | BEQ FlggdPutBl1 65 | JMP VerWriteBlock 66 | FlggdPutBl1 JMP WriteBlock 67 | 68 | _WriteFile JSR EnterTurbo 69 | +bnex DoWrFile3 70 | STA verifyFlag 71 | JSR InitForIO 72 | +LoadW r4, diskBlkBuf 73 | +PushW r6 74 | +PushW r7 75 | JSR DoWriteFile 76 | +PopW r7 77 | +PopW r6 78 | +bnex WrFile1 79 | DEC verifyFlag 80 | JSR DoWriteFile 81 | WrFile1 jmp DoneWithIO 82 | 83 | DoWriteFile LDY #0 84 | LDA (r6),y 85 | BEQ DoWrFile2 86 | STA r1L 87 | INY 88 | LDA (r6),y 89 | STA r1H 90 | DEY 91 | JSR LoKernal 92 | LDA (r6),y 93 | STA (r4),y 94 | INY 95 | LDA (r6),y 96 | STA (r4),y 97 | LDY #$fe 98 | +LoadB CPU_DATA, RAM_64K 99 | DoWrFile1 DEY 100 | LDA (r7),y 101 | STA diskBlkBuf+2,y 102 | TYA 103 | BNE DoWrFile1 104 | +LoadB CPU_DATA, KRNL_IO_IN 105 | JSR FlaggedPutBlock 106 | +bnex DoWrFile3 107 | +AddVW $fe, r7 108 | +bra DoWriteFile 109 | DoWrFile2 TAX 110 | DoWrFile3 RTS 111 | 112 | !if (REUPresent) { 113 | _VerifyRAM LDY #$93 114 | BNE _DoRAMOp 115 | _StashRAM LDY #$90 116 | BNE _DoRAMOp 117 | _SwapRAM LDY #$92 118 | BNE _DoRAMOp 119 | _FetchRAM LDY #$91 120 | _DoRAMOp LDX #DEV_NOT_FOUND 121 | LDA r3L 122 | CMP ramExpSize 123 | BCS DRAMOp2 124 | LDX CPU_DATA 125 | +LoadB CPU_DATA, IO_IN 126 | +MoveW r0, EXP_BASE+2 127 | +MoveW r1, EXP_BASE+4 128 | +MoveB r3L, EXP_BASE+6 129 | +MoveW r2, EXP_BASE+7 130 | LDA #0 131 | STA EXP_BASE+9 132 | STA EXP_BASE+10 133 | STY EXP_BASE+1 134 | DRAMOp1 LDA EXP_BASE 135 | AND #%01100000 136 | BEQ DRAMOp1 137 | STX CPU_DATA 138 | LDX #0 139 | DRAMOp2 RTS 140 | } 141 | 142 | !if (useRamExp) { 143 | RamExpSetStat +LoadW r1, $0000 144 | +LoadB r0H, (>diskBlkBuf) 145 | +LoadB r2H, 0 146 | sta r0L 147 | rts 148 | RamExpGetStat jsr RamExpSetStat 149 | jmp RamExpRead 150 | RamExpPutStat jsr RamExpSetStat 151 | jmp RamExpWrite 152 | } 153 | 154 | !if (usePlus60K) { 155 | ;r0 - c64 addy, r1 - exp page number (byte/word - RamCart 64/128), r2H - # of bytes (in pages) 156 | 157 | RamExpRead +PushB r0H 158 | +PushB r2H 159 | +PushW r1 160 | php 161 | sei 162 | ldy #0 163 | RamExRd_0 lda RamExpRdHlp,y 164 | sta $02a0,y 165 | iny 166 | cpy #RamExpRdHlpEnd-RamExpRdHlp 167 | bne RamExRd_0 168 | jsr $02a0 169 | RamExpRdEnd plp 170 | +PopW r1 171 | +PopB r2H 172 | +PopB r0H 173 | rts 174 | 175 | RamExpWrite +PushB r0H 176 | +PushB r2H 177 | +PushW r1 178 | php 179 | sei 180 | ldy #0 181 | RamExWr_0 lda RamExpWrHlp,y 182 | sta $02a0,y 183 | iny 184 | cpy #RamExpWrHlpEnd-RamExpWrHlp 185 | bne RamExWr_0 186 | jsr $02a0 187 | jmp RamExpRdEnd 188 | 189 | RamExpRdHlp +PushB CPU_DATA 190 | lda r1L 191 | +addv $10 192 | sta r1H 193 | ldy #0 194 | sty r1L 195 | ldx #IO_IN 196 | stx CPU_DATA 197 | 198 | RamExRdH_1 ldx #$80 199 | stx PLUS60K_CR 200 | ldx #RAM_64K 201 | stx CPU_DATA 202 | lda (r1),y 203 | ldx #IO_IN 204 | stx CPU_DATA 205 | ldx #0 206 | stx PLUS60K_CR 207 | sta (r0),y 208 | iny 209 | bne RamExRdH_1 210 | inc r0H 211 | inc r1H 212 | dec r2H 213 | bpl RamExRdH_1 214 | +PopB CPU_DATA 215 | rts 216 | RamExpRdHlpEnd 217 | 218 | RamExpWrHlp +PushB CPU_DATA 219 | lda r1L 220 | +addv $10 221 | sta r1H 222 | ldy #0 223 | sty r1L 224 | 225 | RamExWrH_1 ldx #IO_IN 226 | stx CPU_DATA 227 | ldx #0 228 | stx PLUS60K_CR 229 | lda (r0),y 230 | ldx #$80 231 | stx PLUS60K_CR 232 | ldx #RAM_64K 233 | stx CPU_DATA 234 | sta (r1),y 235 | iny 236 | bne RamExWrH_1 237 | inc r0H 238 | inc r1H 239 | dec r2H 240 | bpl RamExWrH_1 241 | +LoadB CPU_DATA, IO_IN 242 | +LoadB PLUS60K_CR, 0 243 | +PopB CPU_DATA 244 | rts 245 | RamExpWrHlpEnd 246 | } 247 | 248 | 249 | !if (useRamCart64) { 250 | RamExpRead +PushB CPU_DATA 251 | +LoadB CPU_DATA, IO_IN 252 | +PushB r1L 253 | +PushB r0H 254 | ldx r2H 255 | RamExRd_0 +MoveB r1L, RAMC_BASE 256 | ldy #0 257 | RamExRd_1 lda RAMC_WINDOW,y 258 | sta (r0),y 259 | iny 260 | bne RamExRd_1 261 | inc r0H 262 | inc r1L 263 | dex 264 | bpl RamExRd_0 265 | RamExRd_End +PopB r0H 266 | +PopB r1L 267 | +PopB CPU_DATA 268 | rts 269 | 270 | RamExpWrite +PushB CPU_DATA 271 | +LoadB CPU_DATA, IO_IN 272 | +PushB r1L 273 | +PushB r0H 274 | ldx r2H 275 | RamExWr_0 +MoveB r1L, RAMC_BASE 276 | ldy #0 277 | RamExWr_1 lda (r0),y 278 | sta RAMC_WINDOW,y 279 | iny 280 | bne RamExWr_1 281 | inc r0H 282 | inc r1L 283 | dex 284 | bpl RamExWr_0 285 | jmp RamExRd_End 286 | } 287 | 288 | !if (useRamCart128) { 289 | RamExpRead +PushB CPU_DATA 290 | +LoadB CPU_DATA, IO_IN 291 | +PushW r1 292 | +PushB r0H 293 | ldx r2H 294 | RamExRd_0 +MoveW r1, RAMC_BASE 295 | ldy #0 296 | RamExRd_1 lda RAMC_WINDOW,y 297 | sta (r0),y 298 | iny 299 | bne RamExRd_1 300 | inc r0H 301 | inc r1L 302 | bne *+4 303 | inc r1H 304 | dex 305 | bpl RamExRd_0 306 | RamExRd_End +PopB r0H 307 | +PopW r1 308 | +PopB CPU_DATA 309 | rts 310 | 311 | RamExpWrite +PushB CPU_DATA 312 | +LoadB CPU_DATA, IO_IN 313 | +PushW r1 314 | +PushB r0H 315 | ldx r2H 316 | RamExWr_0 +MoveW r1, RAMC_BASE 317 | ldy #0 318 | RamExWr_1 lda (r0),y 319 | sta RAMC_WINDOW,y 320 | iny 321 | bne RamExWr_1 322 | inc r0H 323 | inc r1L 324 | bne *+4 325 | inc r1H 326 | dex 327 | bpl RamExWr_0 328 | jmp RamExRd_End 329 | } 330 | 331 | !if (removeToBASIC) { 332 | } else { 333 | LoKernalBuf 334 | !byte 0, 0, 0, 0, 0, 0, 0, 0 335 | !byte 0, 0, 0, 0, 0, 0, 0, 0 336 | !byte 0, 0, 0, 0, 0, 0, 0, 0 337 | !byte 0, 0, 0, 0, 0, 0, 0, 0 338 | !byte 0, 0, 0, 0, 0, 0, 0, 0 339 | LKIntTimer !byte 0 340 | LKSaveBASIC !byte 0, 0, 0 341 | LKSaveR7 !byte 0, 0 342 | 343 | LoKernal1 SEI 344 | +LoadB CPU_DATA, KRNL_IO_IN 345 | LDY #2 346 | LKernal1 LDA BASICspace,y 347 | STA LKSaveBASIC,y 348 | DEY 349 | BPL LKernal1 350 | +MoveW r7, LKSaveR7 351 | INC CPU_DATA 352 | LDX #$ff 353 | TXS 354 | +LoadB grcntrl2, 0 355 | JSR KERNALCIAInit 356 | LDX curDevice 357 | LDA #0 358 | TAY 359 | LKernal2 STA zpage+2,y 360 | STA zpage+$0200, y 361 | STA zpage+$0300, y 362 | INY 363 | BNE LKernal2 364 | STX curDevice 365 | +LoadB BASICMemTop, $a0 366 | +LoadW tapeBuffVec, $03c3 367 | +LoadB BASICMemBot, $08 368 | LSR 369 | STA scrAddyHi 370 | JSR Init_KRNLVec 371 | JSR KERNALVICInit 372 | LDA #>execBASIC 373 | STA nmivec+1 374 | LDA #MenuStringFault 187 | STA StringFaultVec+1 188 | LDA #GSSkeyVector 231 | STA keyVector+1 232 | LDA #GSStringFault 235 | STA StringFaultVec+1 236 | LDA #IRQ2Handler 53 | sta $ffff 54 | lda #", "[", "@", "<" 216 | !byte KEY_BPS, "*", "]", KEY_CLEAR, KEY_INVALID, "=", "^", "?" 217 | !byte "!", KEY_LARROW, KEY_INVALID, $22, " ", KEY_INVALID, "Q", KEY_RUN 218 | 219 | KbdScanHelp2 PHP 220 | SEI 221 | PHA 222 | +smbf KEYPRESS_BIT, pressFlag 223 | LDX KbdQueTail 224 | PLA 225 | STA KbdQueue,x 226 | JSR KbdScanHelp4 227 | CPX KbdQueHead 228 | BEQ KbdScanHlp_21 229 | STX KbdQueTail 230 | KbdScanHlp_21 PLP 231 | RTS 232 | 233 | KbdScanHelp3 PHP 234 | SEI 235 | LDX KbdQueHead 236 | LDA KbdQueue,x 237 | STA keyData 238 | JSR KbdScanHelp4 239 | STX KbdQueHead 240 | CPX KbdQueTail 241 | BNE KbdScanHlp_31 242 | +rmb KEYPRESS_BIT, pressFlag 243 | KbdScanHlp_31 PLP 244 | RTS 245 | 246 | KbdScanHelp4 INX 247 | CPX #16 248 | BNE KbdScanHlp_41 249 | LDX #0 250 | KbdScanHlp_41 RTS 251 | 252 | KbdScanHelp5 +LoadB cia1base+0, %11111101 253 | LDA cia1base+1 254 | EOR #$ff 255 | AND #%10000000 256 | BNE KbdScanHlp_51 257 | +LoadB cia1base+0, %10111111 258 | LDA cia1base+1 259 | EOR #$ff 260 | AND #%00010000 261 | BEQ KbdScanHlp_52 262 | KbdScanHlp_51 +smbf 7, r1H 263 | KbdScanHlp_52 +LoadB cia1base+0, %01111111 264 | LDA cia1base+1 265 | EOR #$ff 266 | AND #%00100000 267 | BEQ KbdScanHlp_53 268 | +smbf 6, r1H 269 | KbdScanHlp_53 +LoadB cia1base+0, %01111111 270 | LDA cia1base+1 271 | EOR #$ff 272 | AND #%00000100 273 | BEQ KbdScanHlp_54 274 | +smbf 5, r1H 275 | KbdScanHlp_54 RTS 276 | 277 | KbdScanHelp6 PHA 278 | AND #%01111111 279 | CMP #"a" 280 | BCC KbdScanHlp_61 281 | CMP #"z"+1 282 | BCS KbdScanHlp_61 283 | PLA 284 | +subv $20 285 | PHA 286 | KbdScanHlp_61 PLA 287 | RTS 288 | 289 | _DoUpdateTime 290 | SEI 291 | LDX CPU_DATA 292 | +LoadB CPU_DATA, IO_IN 293 | LDA cia1base+15 294 | AND #%01111111 295 | STA cia1base+15 296 | LDA hour 297 | CMP #12 298 | BMI DoUpdTime1 299 | +bbsf 7, cia1base+11, DoUpdTime1 300 | JSR DateUpdate 301 | DoUpdTime1 LDA cia1base+11 302 | AND #%00011111 303 | CMP #$12 304 | BNE DoUpdTime2 305 | LDA #0 306 | DoUpdTime2 +bbrf 7, cia1base+11, DoUpdTime3 307 | SED 308 | +addv $12 309 | CLD 310 | DoUpdTime3 JSR ConvertBCD 311 | STA hour 312 | LDA cia1base+10 313 | JSR ConvertBCD 314 | STA minutes 315 | LDA cia1base+9 316 | JSR ConvertBCD 317 | STA seconds 318 | LDA cia1base+8 319 | LDY #2 320 | DoUpdTime4 LDA year,y 321 | STA dateCopy,y 322 | DEY 323 | BPL DoUpdTime4 324 | +MoveB cia1base+13, r1L 325 | STX CPU_DATA 326 | +bbrf 7, alarmSetFlag, DoUpdTime5 327 | AND #ALARMMASK 328 | BEQ DoUpdTime6 329 | LDA #$4a 330 | STA alarmSetFlag 331 | LDA alarmTmtVector 332 | ORA alarmTmtVector+1 333 | BEQ DoUpdTime5 334 | JMP (alarmTmtVector) 335 | 336 | DoUpdTime5 +bbrf 6, alarmSetFlag, DoUpdTime6 337 | JSR DoClockAlarm 338 | DoUpdTime6 CLI 339 | RTS 340 | 341 | DateUpdate JSR CheckMonth 342 | CMP day 343 | BEQ DateUpd1 344 | INC day 345 | RTS 346 | DateUpd1 LDY #1 347 | STY day 348 | INC month 349 | LDA month 350 | CMP #13 351 | BNE DateUpd2 352 | STY month 353 | INC year 354 | LDA year 355 | CMP #100 356 | BNE DateUpd2 357 | DEY 358 | STY year 359 | DateUpd2 RTS 360 | 361 | CheckMonth LDY month 362 | LDA daysTab-1, y 363 | CPY #2 364 | BNE CheckMonth2 365 | TAY 366 | LDA year 367 | AND #3 368 | BNE CheckMonth1 369 | INY 370 | CheckMonth1 TYA 371 | CheckMonth2 RTS 372 | 373 | DoClockAlarm LDA alarmWarnFlag 374 | BNE DoClkAlrm3 375 | LDY CPU_DATA 376 | +LoadB CPU_DATA, IO_IN 377 | LDX #24 378 | DoClkAlrm1 LDA pingTab,x 379 | STA sidbase,x 380 | DEX 381 | BPL DoClkAlrm1 382 | LDX #$21 383 | LDA alarmSetFlag 384 | AND #%00111111 385 | BNE DoClkAlrm2 386 | TAX 387 | DoClkAlrm2 STX sidbase+4 388 | STY CPU_DATA 389 | LDA #$1e 390 | STA alarmWarnFlag 391 | DEC alarmSetFlag 392 | DoClkAlrm3 RTS 393 | 394 | pingTab 395 | !byte $00, $10, $00, $08, $40, $08, $00, $00 396 | !byte $00, $00, $00, $00, $00, $00, $00, $00 397 | !byte $00, $00, $00, $00, $00, $00, $00, $00 398 | !byte $0f, $00, $0f 399 | -------------------------------------------------------------------------------- /inc/const.inc: -------------------------------------------------------------------------------- 1 | 2 | ;GeosConst - various system constans sorted by function 3 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 4 | ;4-2-99, 18-3-99 5 | 6 | NULL = 0 7 | FALSE = 0 8 | TRUE = $ff 9 | 10 | ;18-8-99 - ACME port 11 | !set false = 0 12 | !set true = $ff 13 | 14 | MOUSE_SPRNUM = 0 15 | 16 | DISK_DRV_LGH = $0d80 17 | OS_VARS_LGH = $0500 18 | 19 | ; 20 | ;filetypes 21 | ; GEOS 22 | NOT_GEOS = 0 23 | BASIC = 1 24 | ASSEMBLY = 2 25 | DATA = 3 26 | SYSTEM = 4 27 | DESK_ACC = 5 28 | APPLICATION = 6 29 | APPL_DATA = 7 30 | FONT = 8 31 | PRINTER = 9 32 | INPUT_DEVICE = 10 33 | DISK_DEVICE = 11 34 | SYSTEM_BOOT = 12 35 | TEMPORARY = 13 36 | AUTO_EXEC = 14 37 | INPUT_128 = 15 38 | NUMFILETYPES = 16 39 | ; structure 40 | SEQUENTIAL = 0 41 | VLIR = 1 42 | ; DOS 43 | DEL = 0 44 | SEQ = 1 45 | PRG = 2 46 | USR = 3 47 | REL = 4 48 | CBM = 5 49 | 50 | ;drivetypes 51 | DRV_NULL = 0 52 | DRV_1541 = 1 53 | DRV_1571 = 2 54 | DRV_1581 = 3 55 | DRV_NETWORK = 15 56 | 57 | ;various disk 58 | REL_FILE_NUM = 9 59 | CMND_FILE_NUM = 15 60 | MAX_CMND_STR = 32 61 | DIR_1581_TRACK = 40 62 | DIR_ACC_CHAN = 13 63 | DIR_TRACK = 18 64 | N_TRACKS = 35 65 | DK_NM_ID_LEN = 18 66 | TRACK = 9 67 | SECTOR = 12 68 | TOTAL_BLOCKS = 664 69 | 70 | ;colours 71 | BLACK = 0 72 | WHITE = 1 73 | RED = 2 74 | CYAN = 3 75 | PURPLE = 4 76 | GREEN = 5 77 | BLUE = 6 78 | YELLOW = 7 79 | ORANGE = 8 80 | BROWN = 9 81 | LTRED = 10 82 | DKGREY = 11 83 | GREY = 12 84 | MEDGREY = 12 85 | LTGREEN = 13 86 | LTBLUE = 14 87 | LTGREY = 15 88 | 89 | ;vic memory banks 90 | GRBANK0 = %11 91 | GRBANK1 = %10 92 | GRBANK2 = %01 93 | GRBANK3 = %00 94 | 95 | ;screen 96 | VIC_X_POS_OFF = 24 97 | VIC_Y_POS_OFF = 50 98 | SC_BYTE_WIDTH = 40 99 | SC_PIX_HEIGHT = 200 100 | SC_PIX_WIDTH = 320 101 | SC_SIZE = 8000 102 | ;128 screen size constants 103 | SCREENBYTEWIDTH = 80 104 | SCREENPIXELWIDTH = 640 105 | 106 | 107 | ;control characters 108 | EOF = 0 109 | BACKSPACE = 8 110 | FORWARDSPACE = 9 111 | TAB = 9 112 | LF = 10 113 | HOME = 11 114 | PAGE_BREAK = 12 115 | UPLINE = 12 116 | CR = 13 117 | ULINEON = 14 118 | ULINEOFF = 15 119 | ESC_GRAPHICS = 16 120 | ESC_RULER = 17 121 | REV_ON = 18 122 | REV_OFF = 19 123 | GOTOX = 20 124 | GOTOY = 21 125 | GOTOXY = 22 126 | NEWCARDSET = 23 127 | BOLDON = 24 128 | ITALICON = 25 129 | OUTLINEON = 26 130 | PLAINTEXT = 27 131 | 132 | ;keyboard 133 | KEY_F1 = 1 134 | KEY_F2 = 2 135 | KEY_F3 = 3 136 | KEY_F4 = 4 137 | KEY_F5 = 5 138 | KEY_F6 = 6 139 | KEY_NOSCRL = 7 140 | KEY_ENTER = 11 141 | KEY_F7 = 14 142 | KEY_F8 = 15 143 | KEY_UP = 16 144 | KEY_DOWN = 17 145 | KEY_HOME = 18 146 | KEY_CLEAR = 19 147 | KEY_LARROW = 20 148 | KEY_UPARROR = 21 149 | KEY_STOP = 22 150 | KEY_RUN = 23 151 | KEY_BPS = 24 152 | KEY_HELP = 25 153 | KEY_ALT = 26 154 | KEY_ESC = 27 155 | KEY_INSERT = 28 156 | KEY_DELETE = 29 157 | KEY_RIGHT = 30 158 | KEY_INVALID = 31 159 | KEY_LEFT = BACKSPACE 160 | 161 | ;DialogBox 162 | ; icons 163 | OK = 1 164 | CANCEL = 2 165 | YES = 3 166 | NO = 4 167 | OPEN = 5 168 | DISK = 6 169 | ; commands 170 | DBTXTSTR = 11 171 | DBVARSTR = 12 172 | DBGETSTRING = 13 173 | DBSYSOPV = 14 174 | DBGRPHSTR = 15 175 | DBGETFILES = 16 176 | DBOPVEC = 17 177 | DBUSRICON = 18 178 | DB_USR_ROUT = 19 179 | ; tabulation in standard window 180 | DBI_X_0 = 1 181 | DBI_X_1 = 9 182 | DBI_X_2 = 17 183 | DBI_Y_0 = 8 184 | DBI_Y_1 = 40 185 | DBI_Y_2 = 72 186 | ; standard window 187 | SET_DB_POS = 0 188 | DEF_DB_POS = $80 189 | DEF_DB_TOP = 32 190 | DEF_DB_BOT = 127 191 | DEF_DB_LEFT = 64 192 | DEF_DB_RIGHT = 255 193 | ; text tabulation 194 | TXT_LN_1_Y = 16 195 | TXT_LN_2_Y = 32 196 | TXT_LN_3_Y = 48 197 | TXT_LN_4_Y = 64 198 | TXT_LN_5_Y = 80 199 | TXT_LN_X = 16 200 | ; ??? 201 | SYSDBI_HEIGHT = 16 202 | SYSDBI_WIDTH = 6 203 | 204 | ;GraphicsString - commands 205 | MOVEPENTO = 1 206 | LINETO = 2 207 | RECTANGLETO = 3 208 | NEWPATTERN = 5 209 | ESC_PUTSTRING = 6 210 | FRAME_RECTO = 7 211 | PEN_X_DELTA = 8 212 | PEN_Y_DELTA = 9 213 | PEN_XY_DELTA = 10 214 | 215 | 216 | ;DoMenu - menutypes 217 | MENU_ACTION = $00 218 | DYN_SUB_MENU = $40 219 | SUB_MENU = $80 220 | HORIZONTAL = %00000000 221 | VERTICAL = %10000000 222 | 223 | ;Errors 224 | ANY_FAULT = %11110000 225 | NO_BLOCKS = 1 226 | INV_TRACK = 2 227 | INSUFF_SPACE = 3 228 | FULL_DIRECTORY = 4 229 | FILE_NOT_FOUND = 5 230 | BAD_BAM = 6 231 | UNOPENED_VLIR = 7 232 | INV_RECORD = 8 233 | OUT_OF_RECORDS = 9 234 | STRUCT_MISMAT = 10 235 | BFR_OVERFLOW = 11 236 | CANCEL_ERR = 12 237 | DEV_NOT_FOUND = 13 238 | INCOMPATIBLE = 14 239 | HDR_NOT_THERE = $20 240 | NO_SYNC = $21 241 | DBLK_NOT_THERE = $22 242 | DAT_CHKSUM_ERR = $23 243 | WR_VER_ERR = $25 244 | WR_PR_ON = $26 245 | HDR_CHKSUM_ERR = $27 246 | DSK_ID_MISMAT = $29 247 | BYTE_DEC_ERR = $2e 248 | DOS_MISMATCH = $73 249 | 250 | ;Offsets 251 | ; ??? 252 | OFF_INDEX_PTR = 1 253 | ; icons 254 | OFF_NM_ICNS = 0 255 | OFF_IC_XMOUSE = 1 256 | OFF_IC_YMOUSE = 3 257 | OFF_PIC_ICON = 0 258 | OFF_X_ICON_POS = 2 259 | OFF_Y_ICON_POS = 3 260 | OFF_WDTH_ICON = 4 261 | OFF_HEIGHT_ICON = 5 262 | OFF_SRV_RT_ICON = 6 263 | OFF_NX_ICON = 8 264 | ; menu 265 | OFF_MY_TOP = 0 266 | OFF_MY_BOT = 1 267 | OFF_MX_LEFT = 2 268 | OFF_MX_RIGHT = 4 269 | OFF_NUM_M_ITEMS = 6 270 | OFF_1ST_M_ITEM = 7 271 | ; dialog box 272 | OFF_DB_FORM = 0 273 | OFF_DB_TOP = 1 274 | OFF_DB_BOT = 2 275 | OFF_DB_LEFT = 3 276 | OFF_DB_RIGHT = 5 277 | OFF_DB_1STCMD = 7 278 | ; directory 279 | ; disk header 280 | OFF_TO_BAM = 4 281 | OFF_DISK_NAME = 144 282 | OFF_GS_DTYPE = 189 283 | OFF_OP_TR_SC = 171 284 | OFF_GS_ID = 173 285 | ; dir entry 286 | FRST_FILE_ENTRY = 2 287 | OFF_CFILE_TYPE = 0 288 | OFF_DE_TR_SC = 1 289 | OFF_FNAME = 3 290 | OFF_GHDR_PTR = 19 291 | OFF_GSTRUC_TYPE = 21 292 | OFF_GFILE_TYPE = 22 293 | OFF_YEAR = 23 294 | OFF_SIZE = 28 295 | OFF_NXT_FILE = 32 296 | ; file header 297 | O_GHIC_WIDTH = 2 298 | O_GHIC_HEIGHT = 3 299 | O_GHIC_PIC = 4 300 | O_GHCMDR_TYPE = 68 301 | O_GHGEOS_TYPE = 69 302 | O_GHSTR_TYPE = 70 303 | O_GHST_ADDR = 71 304 | O_GHEND_ADDR = 73 305 | O_GHST_VEC = 75 306 | O_GHFNAME = 77 307 | O_128_FLAGS = 96 308 | O_GH_AUTHOR = 97 309 | O_GHP_DISK = 97 310 | O_GHP_FNAME = 117 311 | O_GHINFO_TXT = $a0 312 | 313 | ; values for CPU_DATA - C64 memory config 314 | RAM_64K = $30 ;64K RAM 315 | IO_IN = $35 ;60K RAM, 4K I/O space in 316 | KRNL_IO_IN = $36 ;kernal and I/O mapped into memory 317 | KRNL_BAS_IO_IN = $37 ;kernal, I/O and basic mapped into memory 318 | 319 | ;values for config - C128 mmu 320 | CIOIN = $7E ;60K RAM, 4K I/O space in 321 | CRAM64K = $7F ;64K RAM 322 | CKRNLBASIOIN = $40 ;kernal, I/O and basic ROM's mapped into memory 323 | CKRNLIOIN = $4E ;Kernal ROM and I/O space mapped in 324 | 325 | ;values of faultData - pointer position vs. mouseTop/Bottom/Left/Right 326 | ; bit numbers 327 | OFFTOP_BIT = 7 328 | OFFBOTTOM_BIT = 6 329 | OFFLEFT_BIT = 5 330 | OFFRIGHT_BIT = 4 331 | OFFMENU_BIT = 3 332 | ; masks 333 | SET_OFFTOP = %10000000 334 | SET_OFFBOTTOM = %01000000 335 | SET_OFFLEFT = %00100000 336 | SET_OFFRIGHT = %00010000 337 | SET_OFFMENU = %00001000 338 | 339 | ;values of currentMode 340 | ; bit numbers 341 | UNDERLINE_BIT = 7 342 | BOLD_BIT = 6 343 | REVERSE_BIT = 5 344 | ITALIC_BIT = 4 345 | OUTLINE_BIT = 3 346 | SUPERSCRIPT_BIT = 2 347 | SUBSCRIPT_BIT = 1 348 | ; masks 349 | SET_UNDERLINE = %10000000 350 | SET_BOLD = %01000000 351 | SET_REVERSE = %00100000 352 | SET_ITALIC = %00010000 353 | SET_OUTLINE = %00001000 354 | SET_SUPERSCRIPT = %00000100 355 | SET_SUBSCRIPT = %00000010 356 | SET_PLAINTEXT = %00000000 357 | 358 | ;Process control variable 359 | ; bit numbers 360 | RUNABLE_BIT = 7 361 | BLOCKED_BIT = 6 362 | FROZEN_BIT = 5 363 | NOTIMER_BIT = 4 364 | ; masks 365 | SET_RUNABLE = %10000000 366 | SET_BLOCKED = %01000000 367 | SET_FROZEN = %00100000 368 | SET_NOTIMER = %00010000 369 | 370 | ;mouseOn 371 | ; bit numbers 372 | MOUSEON_BIT = 7 373 | MENUON_BIT = 6 374 | ICONSON_BIT = 5 375 | ; masks 376 | SET_MSE_ON = %10000000 377 | SET_MENUON = %01000000 378 | SET_ICONSON = %00100000 379 | 380 | ;pressFlag 381 | ; bit numbers 382 | KEYPRESS_BIT = 7 383 | INPUT_BIT = 6 384 | MOUSE_BIT = 5 385 | ; masks 386 | SET_KEYPRESS = %10000000 387 | SET_INPUTCHG = %01000000 388 | SET_MOUSE = %00100000 389 | 390 | ;dispBufferOn 391 | ST_WRGS_FORE = $20 392 | ST_WR_BACK = $40 393 | ST_WR_FORE = $80 394 | 395 | ;alarmSetFlag 396 | ALARMMASK = %00000100 397 | 398 | ;PutDecimal 399 | ;leading zeroes 400 | SET_NOSURPRESS = %00000000 401 | SET_SURPRESS = %01000000 402 | ;justification 403 | SET_RIGHTJUST = %00000000 404 | SET_LEFTJUST = %10000000 405 | 406 | ;icons, menus status flags 407 | ST_FLASH = $80 408 | ST_INVERT = $40 409 | ST_LD_AT_ADDR = $01 410 | ST_LD_DATA = $80 411 | ST_PR_DATA = $40 412 | ST_WR_PR = $40 413 | 414 | ;??? 415 | ADD1_W = $2000 416 | DOUBLE_B = $80 417 | DOUBLE_W = $8000 418 | 419 | CLR_SAVE = %01000000 420 | CONSTRAINED = %01000000 421 | UN_CONSTRAINED = %00000000 422 | FG_SAVE = %10000000 423 | 424 | FUTURE1 = 7 425 | FUTURE2 = 8 426 | FUTURE3 = 9 427 | FUTURE4 = 10 428 | USELAST = 127 429 | SHORTCUT = 128 430 | -------------------------------------------------------------------------------- /src/kernal/fonts.tas: -------------------------------------------------------------------------------- 1 | 2 | ;font handling functions, mostly for internal (Kernal) use 3 | 4 | ;17-8-99 - ACME port 5 | 6 | _GetRealSize 7 | +subv 32 8 | JSR GetChWdth1 9 | TAY 10 | TXA 11 | LDX curHeight 12 | PHA 13 | AND #$40 14 | BEQ GReSiz1 15 | INY 16 | GReSiz1 PLA 17 | AND #8 18 | BEQ GReSiz2 19 | INX 20 | INX 21 | INY 22 | INY 23 | LDA baselineOffset 24 | +addv 2 25 | RTS 26 | GReSiz2 LDA baselineOffset 27 | RTS 28 | 29 | Font_1 30 | LDY r1H 31 | INY 32 | STY E87FE 33 | STA r5L 34 | LDX #0 35 | +addv 32 36 | JSR GetRealSize 37 | TYA 38 | PHA 39 | LDA r5L 40 | ASL 41 | TAY 42 | LDA (curIndexTable),y 43 | STA r2L 44 | AND #%00000111 45 | STA E87FD 46 | LDA r2L 47 | AND #%11111000 48 | STA r3L 49 | INY 50 | LDA (curIndexTable),y 51 | STA r2H 52 | PLA 53 | +add r2L 54 | STA r6H 55 | CLC 56 | SBC r3L 57 | LSR 58 | LSR 59 | LSR 60 | STA r3H 61 | TAX 62 | CPX #3 63 | BCC Font_11 64 | LDX #3 65 | Font_11 LDA Font_tabL,x 66 | STA r13L 67 | LDA Font_tabH,x 68 | STA r13H 69 | LDA r2L 70 | LSR r2H 71 | ROR 72 | LSR r2H 73 | ROR 74 | LSR r2H 75 | ROR 76 | +add cardDataPntr 77 | STA r2L 78 | LDA r2H 79 | ADC cardDataPntr+1 80 | STA r2H 81 | LDY E87FD 82 | LDA BitMask3,y 83 | EOR #$ff 84 | STA E87FC 85 | LDY r6H 86 | DEY 87 | TYA 88 | AND #%00000111 89 | TAY 90 | LDA BitMask4,y 91 | EOR #$ff 92 | STA r7H 93 | LDA currentMode 94 | TAX 95 | AND #SET_OUTLINE 96 | BEQ Font_12 97 | LDA #$80 98 | Font_12 STA r8H 99 | LDA r5L 100 | +addv 32 101 | JSR GetRealSize 102 | STA r5H 103 | +SubB r5H, r1H 104 | STX r10H 105 | TYA 106 | PHA 107 | LDA r11H 108 | BMI Font_13 109 | +CmpW rightMargin, r11 110 | BCC Font_16 111 | Font_13 LDA currentMode 112 | AND #SET_ITALIC 113 | BNE Font_14 114 | TAX 115 | Font_14 TXA 116 | LSR 117 | STA r3L 118 | +add r11L 119 | STA FontTVar2 120 | LDA r11H 121 | ADC #0 122 | STA FontTVar2+1 123 | +PopB PrvCharWidth 124 | +add FontTVar2 125 | STA r11L 126 | LDA #0 127 | ADC FontTVar2+1 128 | STA r11H 129 | BMI Font_17 130 | +CmpW leftMargin, r11 131 | BCS Font_17 132 | JSR Font_2 133 | LDX #0 134 | LDA currentMode 135 | AND #SET_REVERSE 136 | BEQ Font_15 137 | DEX 138 | Font_15 STX r10L 139 | CLC 140 | RTS 141 | 142 | Font_16 143 | +PopB PrvCharWidth 144 | +add r11L 145 | STA r11L 146 | BCC Font_18 147 | INC r11H 148 | SEC 149 | RTS 150 | Font_17 151 | +SubB r3L, r11L 152 | BCS Font_18 153 | DEC r11H 154 | Font_18 SEC 155 | RTS 156 | 157 | Font_tabL !byte FontGt1, >FontGt2, >FontGt3, >FontGt4 159 | 160 | Font_2 161 | LDX r1H 162 | JSR GetScanLine 163 | LDA FontTVar2 164 | LDX FontTVar2+1 165 | BMI Font_22 166 | CPX leftMargin+1 167 | BNE Font_21 168 | CMP leftMargin 169 | Font_21 BCS Font_23 170 | Font_22 LDX leftMargin+1 171 | LDA leftMargin 172 | Font_23 PHA 173 | AND #%11111000 174 | STA r4L 175 | CPX #0 176 | BNE Font_24 177 | CMP #$c0 178 | BCC Font_26 179 | Font_24 +subv $80 180 | PHA 181 | +AddVB $80, r5L 182 | STA r6L 183 | BCC Font_25 184 | INC r5H 185 | INC r6H 186 | Font_25 PLA 187 | Font_26 STA r1L 188 | +MoveB FontTVar2+1, r3L 189 | LSR r3L 190 | LDA FontTVar2 191 | ROR 192 | LSR r3L 193 | ROR 194 | LSR r3L 195 | ROR 196 | STA r7L 197 | LDA leftMargin+1 198 | LSR 199 | LDA leftMargin 200 | ROR 201 | LSR 202 | LSR 203 | +sub r7L 204 | BPL Font_27 205 | LDA #0 206 | Font_27 STA FontTVar1 207 | LDA FontTVar2 208 | AND #%00000111 209 | STA r7L 210 | PLA 211 | AND #%00000111 212 | TAY 213 | LDA BitMask3,y 214 | STA r3L 215 | EOR #$ff 216 | STA r9L 217 | LDY r11L 218 | DEY 219 | LDX rightMargin+1 220 | LDA rightMargin 221 | CPX r11H 222 | BNE Font_28 223 | CMP r11L 224 | Font_28 BCS Font_29 225 | TAY 226 | Font_29 TYA 227 | AND #%00000111 228 | TAX 229 | LDA BitMask4,x 230 | STA r4H 231 | EOR #$ff 232 | STA r9H 233 | TYA 234 | +sub r4L 235 | BPL Font_210 236 | LDA #0 237 | Font_210 LSR 238 | LSR 239 | LSR 240 | +add FontTVar1 241 | STA r8L 242 | CMP r3H 243 | BCS Font_211 244 | LDA r3H 245 | Font_211 CMP #3 246 | BCS Font_213 247 | CMP #2 248 | BNE Font_212 249 | LDA #1 250 | Font_212 ASL 251 | ASL 252 | ASL 253 | ASL 254 | STA r12L 255 | LDA r7L 256 | +sub E87FD 257 | +addv 8 258 | +add r12L 259 | TAX 260 | LDA Font_tab2,x 261 | +addv FontSH1 265 | BNE Font_214 266 | Font_213 LDA #>FontSH5 267 | LDY #DBDoIcons, >DBDoIcons 75 | !byte >DBDoIcons, >DBDoIcons 76 | !byte >DBDoIcons, >DBDoIcons 77 | !byte DBDoTXTSTR, >DBDoVARSTR 80 | !byte >DBDoGETSTR, >DBDoSYSOPV 81 | !byte >DBDoGRPHSTR, >DBDoGETFILES 82 | !byte >DBDoOPVEC, >DBDoUSRICON 83 | !byte >DBDoUSR_ROUT 84 | 85 | DlgBoxPrep +PushB CPU_DATA 86 | +LoadB CPU_DATA, IO_IN 87 | +LoadW r4, dlgBoxRamBuf 88 | JSR Dialog_3 89 | +LoadB mobenble, 1 90 | +PopB CPU_DATA 91 | +LoadB sysDBData, NULL 92 | JMP InitGEOEnv 93 | 94 | DrawDlgBox +LoadB dispBufferOn, ST_WR_FORE | ST_WRGS_FORE 95 | LDY #0 96 | LDA (DBoxDesc),y 97 | AND #%00011111 98 | !if (speedupDlgBox) { 99 | BNE DrwDlgSpd0 100 | JMP DrwDlgBx1 101 | DrwDlgSpd0 ;1st: right,right+8,top+8,bottom 102 | ;2nd: left+8,right+8,bottom,bottom+8 103 | JSR SetPattern 104 | +PushW DBoxDesc 105 | LDY #0 106 | LDA (DBoxDesc),y 107 | BPL DrwDlgSpd1 108 | LDA #>DBDefinedPos-1 109 | STA DBoxDescH 110 | LDA #DBDefinedPos-1 194 | STA DBoxDescH 195 | LDA #DBKeyVector 324 | STA keyVector+1 325 | LDA #DBDefIconsTab 336 | STA r5H 337 | JSR DBIconsHelp1 338 | JMP DBIconsHelp2 339 | 340 | DBDoUSRICON JSR DBIconsHelp1 341 | LDA (DBoxDesc),y 342 | STA r5L 343 | INY 344 | LDA (DBoxDesc),y 345 | STA r5H 346 | INY 347 | TYA 348 | PHA 349 | JSR DBIconsHelp2 350 | +PopB r1L 351 | RTS 352 | 353 | DBIconsHelp1 CLC 354 | JSR CalcDialogCoords 355 | LSR r3H 356 | ROR r3L 357 | LSR r3L 358 | LSR r3L 359 | LDY r1L 360 | LDA (DBoxDesc),y 361 | CLC 362 | ADC r3L 363 | STA r3L 364 | INY 365 | LDA (DBoxDesc),y 366 | CLC 367 | ADC r2L 368 | STA r2L 369 | INY 370 | STY r1L 371 | RTS 372 | 373 | DBIconsHelp2 LDX defIconTab 374 | CPX #8 375 | BCS DBIcHlp_23 376 | TXA 377 | INX 378 | STX defIconTab 379 | JSR CalcIconDescTab 380 | TAX 381 | LDY #0 382 | DBIcHlp_20 LDA (r5),y 383 | CPY #2 384 | BNE DBIcHlp_21 385 | LDA r3L 386 | DBIcHlp_21 CPY #3 387 | BNE DBIcHlp_22 388 | LDA r2L 389 | DBIcHlp_22 STA defIconTab,x 390 | INX 391 | INY 392 | CPY #8 393 | BNE DBIcHlp_20 394 | DBIcHlp_23 RTS 395 | 396 | DBDefIconsTab 397 | !word DBIcPicOK 398 | !word 0 399 | !byte 6, 16 400 | !word DBIcOK 401 | 402 | !word DBIcPicCANCEL 403 | !word 0 404 | !byte 6, 16 405 | !word DBIcCANCEL 406 | 407 | !word DBIcPicYES 408 | !word 0 409 | !byte 6, 16 410 | !word DBIcYES 411 | 412 | !word DBIcPicNO 413 | !word 0 414 | !byte 6, 16 415 | !word DBIcNO 416 | 417 | !word DBIcPicOPEN 418 | !word 0 419 | !byte 6, 16 420 | !word DBIcOPEN 421 | 422 | !word DBIcPicDISK 423 | !word 0 424 | !byte 6, 16 425 | !word DBIcDISK 426 | 427 | DBKeyVector +CmpBI keyData, CR 428 | BEQ DBIcOK 429 | RTS 430 | DBIcOK LDA #OK 431 | BNE DBKeyVec1 432 | DBIcCANCEL LDA #CANCEL 433 | BNE DBKeyVec1 434 | DBIcYES LDA #YES 435 | BNE DBKeyVec1 436 | DBIcNO LDA #NO 437 | BNE DBKeyVec1 438 | DBIcOPEN LDA #OPEN 439 | BNE DBKeyVec1 440 | DBIcDISK LDA #DISK 441 | DBKeyVec1 STA sysDBData 442 | JMP RstrFrmDialogue 443 | 444 | DBDoSYSOPV LDA #>DBStringFaultVec 445 | STA otherPressVec+1 446 | LDA #DBKeyVector2 539 | STA keyVector+1 540 | LDA #DBGFilesArrowsIcons 613 | STA r5H 614 | LDA #DBGFPressVector 618 | STA otherPressVec+1 619 | LDA #fileTrScTab 758 | ADC #0 759 | STA zpage+1,x 760 | RTS 761 | 762 | DBGFilesHelp5 +PushW rightMargin 763 | LDA #0 764 | JSR DBGFilesHelp8 765 | +MoveW r4, rightMargin 766 | +LoadB r15L, 0 767 | JSR SetPattern 768 | LDA DBGFTableIndex 769 | LDX #r14 770 | JSR DBGFilesHelp4 771 | +LoadB currentMode, SET_BOLD 772 | DBGFlsHlp_51 LDA r15L 773 | JSR DBGFilesHelp8 774 | JSR Rectangle 775 | +MoveW r3, r11 776 | LDA r2L 777 | +addv 9 778 | STA r1H 779 | +MoveW r14, r0 780 | JSR PutString 781 | +AddVW 17, r14 782 | INC r15L 783 | +CmpBI r15L, 5 784 | BNE DBGFlsHlp_51 785 | JSR DBGFilesHelp6 786 | +LoadB currentMode, NULL 787 | +PopW rightMargin 788 | RTS 789 | 790 | DBGFilesHelp6 LDA DBGFileSelected 791 | +sub DBGFTableIndex 792 | JSR DBGFilesHelp8 793 | JMP InvertRectangle 794 | 795 | DBGFilesHelp7 CLC 796 | JSR CalcDialogCoords 797 | +AddB DBGFOffsLeft, r3L 798 | BCC *+4 799 | INC r3H 800 | +addv $7c 801 | STA r4L 802 | LDA #0 803 | ADC r3H 804 | STA r4H 805 | +AddB DBGFOffsTop, r2L 806 | ADC #$58 807 | STA r2H 808 | RTS 809 | 810 | DBGFilesHelp8 STA r0L 811 | +LoadB r1L, 14 812 | LDY #r1 813 | LDX #r0 814 | JSR BBMult 815 | JSR DBGFilesHelp7 816 | +AddB r0L, r2L 817 | CLC 818 | ADC #14 819 | STA r2H 820 | INC r2L 821 | DEC r2H 822 | INC r3L 823 | BNE *+4 824 | INC r3H 825 | LDX #r4 826 | jmp Ddec 827 | -------------------------------------------------------------------------------- /src/kernal/graph.tas: -------------------------------------------------------------------------------- 1 | 2 | ;graphical functions (lines, rectangles, points, bitmaps) 3 | 4 | ;18-8-99 - ACME port 5 | 6 | ClrScr 7 | +LoadW r0, SCREEN_BASE 8 | +LoadW r1, BACK_SCR_BASE 9 | LDX #$7D 10 | ClrScr1 LDY #$3F 11 | ClrScr2 LDA #backPattern1 12 | STA (r0),Y 13 | STA (r1),Y 14 | DEY 15 | LDA #backPattern2 16 | STA (r0),Y 17 | STA (r1),Y 18 | DEY 19 | BPL ClrScr2 20 | +AddVW 64, r0 21 | +AddVW 64, r1 22 | DEX 23 | BNE ClrScr1 24 | RTS 25 | 26 | 27 | PrepareXCoord 28 | LDX r11L 29 | JSR _GetScanLine 30 | LDA r4L 31 | AND #%00000111 32 | TAX 33 | LDA BitMask4,X 34 | STA r8H 35 | LDA r3L 36 | AND #%00000111 37 | TAX 38 | LDA BitMask3,X 39 | STA r8L 40 | LDA r3L 41 | AND #%11111000 42 | STA r3L 43 | LDA r4L 44 | AND #%11111000 45 | STA r4L 46 | RTS 47 | 48 | _HorizontalLine 49 | STA r7L 50 | +PushW r3 51 | +PushW r4 52 | JSR PrepareXCoord 53 | LDY r3L 54 | LDA r3H 55 | BEQ HLin0 56 | INC r5H 57 | INC r6H 58 | HLin0 +CmpW r3, r4 59 | HLin1 BEQ HLin4 60 | +SubW r3, r4 61 | LSR r4H 62 | ROR r4L 63 | LSR r4L 64 | LSR r4L 65 | LDA r8L 66 | JSR HLineHelp 67 | HLin2 STA (r6),Y 68 | STA (r5),Y 69 | TYA 70 | +addv 8 71 | TAY 72 | BCC HLin3 73 | INC r5H 74 | INC r6H 75 | HLin3 DEC r4L 76 | BEQ HLin5 77 | LDA r7L 78 | +bra HLin2 79 | HLin4 LDA r8L 80 | ORA r8H 81 | +bra HLin6 82 | HLin5 LDA r8H 83 | HLin6 JSR HLineHelp 84 | HLin7 STA (r6),Y 85 | STA (r5),Y 86 | HLin8 +PopW r4 87 | +PopW r3 88 | RTS 89 | 90 | HLineHelp STA r11H 91 | AND (r6),Y 92 | STA r7H 93 | LDA r11H 94 | EOR #$FF 95 | AND r7L 96 | ORA r7H 97 | RTS 98 | _InvertLine 99 | +PushW r3 100 | +PushW r4 101 | JSR PrepareXCoord 102 | LDY r3L 103 | LDA r3H 104 | BEQ ILin0 105 | INC r5H 106 | INC r6H 107 | ILin0 +CmpW r3, r4 108 | ILin1 BEQ ILin4 109 | +SubW r3, r4 110 | LSR r4H 111 | ROR r4L 112 | LSR r4L 113 | LSR r4L 114 | LDA r8L 115 | EOR (r5),Y 116 | ILin2 EOR #$FF 117 | STA (r6),Y 118 | STA (r5),Y 119 | TYA 120 | +addv 8 121 | TAY 122 | BCC ILin3 123 | INC r5H 124 | INC r6H 125 | ILin3 DEC r4L 126 | BEQ ILin5 127 | LDA (r5),Y 128 | +bra ILin2 129 | ILin4 LDA r8L 130 | ORA r8H 131 | +bra ILin6 132 | ILin5 LDA r8H 133 | ILin6 EOR #$FF 134 | EOR (r5),Y 135 | JMP HLin7 136 | 137 | ImprintLine +PushW r3 138 | +PushW r4 139 | +PushB dispBufferOn 140 | ORA #ST_WR_FORE | ST_WR_BACK 141 | STA dispBufferOn 142 | JSR PrepareXCoord 143 | +PopB dispBufferOn 144 | LDA r5L 145 | LDY r6L 146 | STA r6L 147 | STY r5L 148 | LDA r5H 149 | LDY r6H 150 | STA r6H 151 | STY r5H 152 | +bra RLin0 153 | 154 | _RecoverLine 155 | +PushW r3 156 | +PushW r4 157 | +PushB dispBufferOn 158 | ORA #ST_WR_FORE | ST_WR_BACK 159 | STA dispBufferOn 160 | JSR PrepareXCoord 161 | +PopB dispBufferOn 162 | 163 | RLin0 LDY r3L 164 | LDA r3H 165 | BEQ RLin1 166 | INC r5H 167 | INC r6H 168 | RLin1 +CmpW r3, r4 169 | RLin2 BEQ RLin5 170 | +SubW r3, r4 171 | LSR r4H 172 | ROR r4L 173 | LSR r4L 174 | LSR r4L 175 | LDA r8L 176 | JSR RecLineHelp 177 | RLin3 TYA 178 | +addv 8 179 | TAY 180 | BCC RLin4 181 | INC r5H 182 | INC r6H 183 | RLin4 DEC r4L 184 | BEQ RLin6 185 | LDA (r6),Y 186 | STA (r5),Y 187 | +bra RLin3 188 | RLin5 LDA r8L 189 | ORA r8H 190 | +bra RLin7 191 | RLin6 LDA r8H 192 | RLin7 JSR RecLineHelp 193 | JMP HLin8 194 | 195 | RecLineHelp STA r7L 196 | AND (r5),Y 197 | STA r7H 198 | LDA r7L 199 | EOR #$FF 200 | AND (r6),Y 201 | ORA r7H 202 | STA (r5),Y 203 | RTS 204 | 205 | _VerticalLine 206 | STA r8L 207 | +PushB r4L 208 | AND #%00000111 209 | TAX 210 | LDA BitMask1,X 211 | STA r7H 212 | LDA r4L 213 | AND #%11111000 214 | STA r4L 215 | LDY #0 216 | LDX r3L 217 | VLin0 STX r7L 218 | JSR _GetScanLine 219 | +AddW r4, r5 220 | +AddW r4, r6 221 | LDA r7L 222 | AND #%00000111 223 | TAX 224 | LDA BitMask1,X 225 | AND r8L 226 | BNE VLin1 227 | LDA r7H 228 | EOR #$FF 229 | AND (r6),Y 230 | +bra VLin2 231 | VLin1 LDA r7H 232 | ORA (r6),Y 233 | VLin2 STA (r6),Y 234 | STA (r5),Y 235 | LDX r7L 236 | INX 237 | CPX r3H 238 | BEQ VLin0 239 | BCC VLin0 240 | +PopB r4L 241 | RTS 242 | 243 | _i_Rectangle 244 | JSR GetInlineDrwParms 245 | JSR _Rectangle 246 | PHP 247 | LDA #7 248 | JMP DoInlineReturn 249 | 250 | _Rectangle 251 | +MoveB r2L, r11L 252 | Rect1 LDA r11L 253 | AND #$07 254 | TAY 255 | LDA (curPattern),Y 256 | JSR _HorizontalLine 257 | LDA r11L 258 | INC r11L 259 | CMP r2H 260 | BNE Rect1 261 | RTS 262 | 263 | _InvertRectangle 264 | +MoveB r2L, r11L 265 | IRect1 JSR _InvertLine 266 | LDA r11L 267 | INC r11L 268 | CMP r2H 269 | BNE IRect1 270 | RTS 271 | 272 | _i_RecoverRectangle 273 | JSR GetInlineDrwParms 274 | JSR _RecoverRectangle 275 | PHP 276 | LDA #7 277 | JMP DoInlineReturn 278 | 279 | _RecoverRectangle 280 | +MoveB r2L, r11L 281 | RRect1 JSR _RecoverLine 282 | LDA r11L 283 | INC r11L 284 | CMP r2H 285 | BNE RRect1 286 | RTS 287 | 288 | _i_ImprintRectangle 289 | JSR GetInlineDrwParms 290 | JSR _ImprintRectangle 291 | PHP 292 | LDA #7 293 | JMP DoInlineReturn 294 | 295 | _ImprintRectangle 296 | +MoveB r2L, r11L 297 | ImRec1 JSR ImprintLine 298 | LDA r11L 299 | INC r11L 300 | CMP r2H 301 | BNE ImRec1 302 | RTS 303 | 304 | _i_FrameRectangle 305 | JSR GetInlineDrwParms 306 | INY 307 | LDA (returnAddress),Y 308 | JSR _FrameRectangle 309 | PHP 310 | LDA #8 311 | JMP DoInlineReturn 312 | 313 | _FrameRectangle 314 | STA r9H 315 | LDY r2L 316 | STY r11L 317 | JSR _HorizontalLine 318 | +MoveB r2H, r11L 319 | LDA r9H 320 | JSR _HorizontalLine 321 | +PushW r3 322 | +PushW r4 323 | +MoveW r3, r4 324 | +MoveW r2, r3 325 | LDA r9H 326 | JSR _VerticalLine 327 | +PopW r4 328 | LDA r9H 329 | JSR _VerticalLine 330 | +PopW r3 331 | RTS 332 | 333 | GetInlineDrwParms 334 | +PopW r5 335 | +PopW returnAddress 336 | LDY #1 337 | LDA (returnAddress),Y 338 | STA r2L 339 | INY 340 | LDA (returnAddress),Y 341 | STA r2H 342 | INY 343 | LDA (returnAddress),Y 344 | STA r3L 345 | INY 346 | LDA (returnAddress),Y 347 | STA r3H 348 | INY 349 | LDA (returnAddress),Y 350 | STA r4L 351 | INY 352 | LDA (returnAddress),Y 353 | STA r4H 354 | +PushW r5 355 | GtDrwPrmsEnd RTS 356 | 357 | _i_GraphicsString 358 | +PopB r0L 359 | PLA 360 | INC r0L 361 | BNE i_GStr0 362 | +addv 1 363 | i_GStr0 STA r0H 364 | JSR _GraphicsString 365 | JMP (r0) 366 | 367 | _GraphicsString 368 | JSR Getr0AndInc 369 | BEQ GtDrwPrmsEnd 370 | TAY 371 | DEY 372 | LDA GStrTL,Y 373 | LDX GStrTH,Y 374 | JSR CallRoutine 375 | +bra _GraphicsString 376 | 377 | GStrTL !byte <_DoMovePenTo, <_DoLineTo 378 | !byte <_DoRectangleTo, <_DoNothing 379 | !byte <_DoNewPattern, <_DoESC_PutString 380 | !byte <_DoFrame_RecTo, <_DoPenXDelta 381 | !byte <_DoPenYDelta, <_DoPenXYDelta 382 | 383 | GStrTH !byte >_DoMovePenTo, >_DoLineTo 384 | !byte >_DoRectangleTo, >_DoNothing 385 | !byte >_DoNewPattern, >_DoESC_PutString 386 | !byte >_DoFrame_RecTo, >_DoPenXDelta 387 | !byte >_DoPenYDelta, >_DoPenXYDelta 388 | 389 | _DoMovePenTo 390 | JSR GetCoords 391 | STA GraphPenY 392 | STX GraphPenXL 393 | STY GraphPenXH 394 | _DoNothing RTS 395 | 396 | _DoLineTo 397 | +MoveW GraphPenX, r3 398 | +MoveB GraphPenY, r11L 399 | JSR _DoMovePenTo 400 | STA r11H 401 | STX r4L 402 | STY r4H 403 | SEC 404 | LDA #0 405 | JMP _DrawLine 406 | 407 | _DoRectangleTo 408 | JSR GrStSetCoords 409 | JMP _Rectangle 410 | 411 | _DoNewPattern 412 | JSR Getr0AndInc 413 | JMP _SetPattern 414 | 415 | _DoESC_PutString 416 | JSR Getr0AndInc 417 | STA r11L 418 | JSR Getr0AndInc 419 | STA r11H 420 | JSR Getr0AndInc 421 | STA r1H 422 | jmp _PutString 423 | 424 | _DoFrame_RecTo 425 | JSR GrStSetCoords 426 | LDA #$FF 427 | JMP _FrameRectangle 428 | 429 | _DoPenXYDelta 430 | LDX #1 431 | BNE DPXD0 432 | _DoPenXDelta 433 | LDX #0 434 | DPXD0 LDY #0 435 | LDA (r0),Y 436 | INY 437 | +add GraphPenXL 438 | STA GraphPenXL 439 | LDA (r0),Y 440 | INY 441 | ADC GraphPenXH 442 | STA GraphPenXH 443 | +beqx DPYD1 444 | BNE DPYD0 445 | _DoPenYDelta 446 | LDY #0 447 | DPYD0 LDA (r0),Y 448 | INY 449 | +add GraphPenY 450 | STA GraphPenY 451 | INY 452 | DPYD1 TYA 453 | +add r0L 454 | STA r0L 455 | BCC DPYD2 456 | INC r0H 457 | DPYD2 RTS 458 | 459 | GrStSetCoords 460 | JSR GetCoords 461 | CMP GraphPenY 462 | BCS GSSC0 463 | STA r2L 464 | PHA 465 | LDA GraphPenY 466 | STA r2H 467 | +bra GSSC1 468 | GSSC0 STA r2H 469 | PHA 470 | LDA GraphPenY 471 | STA r2L 472 | GSSC1 +PopB GraphPenY 473 | CPY GraphPenXH 474 | BEQ GSSC2 475 | BCS GSSC4 476 | GSSC2 BCC GSSC3 477 | CPX GraphPenXL 478 | BCS GSSC4 479 | GSSC3 STX r3L 480 | STY r3H 481 | +MoveW GraphPenX, r4 482 | +bra GSSC5 483 | GSSC4 STX r4L 484 | STY r4H 485 | +MoveW GraphPenX, r3 486 | GSSC5 STX GraphPenXL 487 | STY GraphPenXH 488 | RTS 489 | _SetPattern 490 | ASL 491 | ASL 492 | ASL 493 | ADC #PatternTab 497 | STA curPattern+1 498 | RTS 499 | 500 | GetCoords JSR Getr0AndInc 501 | TAX 502 | JSR Getr0AndInc 503 | STA r2L 504 | JSR Getr0AndInc 505 | LDY r2L 506 | RTS ;x/y - x, a - y 507 | 508 | Getr0AndInc LDY #0 509 | LDA (r0),Y 510 | INC r0L 511 | BNE Gr0AI0 512 | INC r0H 513 | Gr0AI0 CMP #0 514 | RTS 515 | 516 | _GetScanLine 517 | TXA 518 | PHA 519 | and #%00000111 520 | sta r6H 521 | txa 522 | LSR 523 | LSR 524 | LSR 525 | TAX 526 | +bbrf 7, dispBufferOn, GSC2 527 | bvs GSC1 528 | LDA LineTabL,X 529 | ORA r6H 530 | STA r5L 531 | LDA LineTabH,X 532 | STA r5H 533 | +MoveW r5, r6 534 | PLA 535 | TAX 536 | RTS 537 | 538 | GSC1 LDA LineTabL,X 539 | ORA r6H 540 | STA r5L 541 | STA r6L 542 | LDA LineTabH,X 543 | STA r5H 544 | +subv 64 545 | STA r6H 546 | PLA 547 | TAX 548 | RTS 549 | 550 | GSC2 +bbrf 6, dispBufferOn, GSC3 551 | LDA LineTabL,X 552 | ORA r6H 553 | STA r6L 554 | LDA LineTabH,X 555 | +subv 64 556 | STA r6H 557 | +MoveW r6, r5 558 | PLA 559 | TAX 560 | RTS 561 | 562 | GSC3 +LoadB r5L, 0 563 | STA r6L 564 | +LoadB r5H, $AF 565 | STA r6H 566 | PLA 567 | TAX 568 | RTS 569 | 570 | 571 | _BitOtherClip 572 | LDX #$ff 573 | JMP BitmClp1 574 | _BitmapClip 575 | LDX #0 576 | BitmClp1 STX r9H 577 | LDA #0 578 | STA r3L 579 | STA r4L 580 | BitmClp2 LDA r12L 581 | ORA r12H 582 | BEQ BitmClp4 583 | LDA r11L 584 | JSR BitmHelpClp 585 | LDA r2L 586 | JSR BitmHelpClp 587 | LDA r11H 588 | JSR BitmHelpClp 589 | LDA r12L 590 | BNE BitmClp3 591 | DEC r12H 592 | BitmClp3 DEC r12L 593 | +bra BitmClp2 594 | BitmClp4 LDA r11L 595 | JSR BitmHelpClp 596 | JSR BitmapUpHelp 597 | LDA r11H 598 | JSR BitmHelpClp 599 | INC r1H 600 | DEC r2H 601 | BNE BitmClp4 602 | RTS 603 | 604 | BitmHelpClp CMP #0 605 | BEQ BitmHClp1 606 | PHA 607 | JSR BitmapDecode 608 | PLA 609 | +subv 1 610 | BNE BitmHelpClp 611 | BitmHClp1 RTS 612 | 613 | _i_BitmapUp 614 | +PopW returnAddress 615 | LDY #1 616 | LDA (returnAddress),y 617 | STA r0L 618 | INY 619 | LDA (returnAddress),y 620 | STA r0H 621 | INY 622 | LDA (returnAddress),y 623 | STA r1L 624 | INY 625 | LDA (returnAddress),y 626 | STA r1H 627 | INY 628 | LDA (returnAddress),y 629 | STA r2L 630 | INY 631 | LDA (returnAddress),y 632 | STA r2H 633 | JSR _BitmapUp 634 | PHP 635 | LDA #7 636 | JMP DoInlineReturn 637 | 638 | _BitmapUp 639 | +PushB r9H 640 | +LoadB r9H, NULL 641 | STA r3L 642 | STA r4L 643 | BitmUp1 JSR BitmapUpHelp 644 | INC r1H 645 | DEC r2H 646 | BNE BitmUp1 647 | +PopB r9H 648 | RTS 649 | 650 | BitmapUpHelp LDX r1H 651 | JSR _GetScanLine 652 | +MoveB r2L, r3H 653 | +CmpBI r1L, $20 654 | BCC BitmUpH1 655 | INC r5H 656 | INC r6H 657 | BitmUpH1 ASL 658 | ASL 659 | ASL 660 | TAY 661 | BitmUpH2 STY r9L 662 | JSR BitmapDecode 663 | LDY r9L 664 | STA (r5),y 665 | STA (r6),y 666 | TYA 667 | +addv 8 668 | BCC BitmUpH3 669 | INC r5H 670 | INC r6H 671 | BitmUpH3 TAY 672 | DEC r3H 673 | BNE BitmUpH2 674 | RTS 675 | 676 | BitmapDecode LDA r3L 677 | AND #%01111111 678 | BEQ BitmDe2 679 | +bbrf 7, r3L, BitmDe1 680 | JSR BitmapDecode2 681 | DEC r3L 682 | RTS 683 | BitmDe1 LDA r7H 684 | DEC r3L 685 | RTS 686 | BitmDe2 LDA r4L 687 | BNE BitmDe3 688 | +bbrf 7, r9H, BitmDe3 689 | JSR IndirectR14 690 | BitmDe3 JSR BitmapDecode2 691 | STA r3L 692 | CMP #$dc 693 | BCC BitmDe4 694 | SBC #$dc 695 | STA r7L 696 | STA r4H 697 | JSR BitmapDecode2 698 | +subv 1 699 | STA r4L 700 | +MoveW r0, r8 701 | +bra BitmDe2 702 | BitmDe4 CMP #$80 703 | BCS BitmapDecode 704 | JSR BitmapDecode2 705 | STA r7H 706 | +bra BitmapDecode 707 | 708 | BitmapDecode2 BIT r9H 709 | BPL BitmDe21 710 | JSR IndirectR13 711 | BitmDe21 LDY #0 712 | LDA (r0),y 713 | INC r0L 714 | BNE *+4 715 | INC r0H 716 | LDX r4L 717 | BEQ BitmDe22 718 | DEC r4H 719 | BNE BitmDe22 720 | LDX r8H 721 | STX r0H 722 | LDX r8L 723 | STX r0L 724 | LDX r7L 725 | STX r4H 726 | DEC r4L 727 | BitmDe22 RTS 728 | 729 | IndirectR13 JMP (r13) 730 | 731 | IndirectR14 JMP (r14) 732 | 733 | _DrawLine 734 | PHP 735 | +LoadB r7H, 0 736 | LDA r11H 737 | +sub r11L 738 | STA r7L 739 | BCS DrwLin1 740 | LDA #0 741 | +sub r7L 742 | STA r7L 743 | DrwLin1 LDA r4L 744 | +sub r3L 745 | STA r12L 746 | LDA r4H 747 | SBC r3H 748 | STA r12H 749 | LDX #r12 750 | JSR Dabs 751 | +CmpW r12, r7 752 | BCS DrwLin2 753 | JMP DrawLine2 754 | DrwLin2 LDA r7L 755 | ASL 756 | STA r9L 757 | LDA r7H 758 | ROL 759 | STA r9H 760 | LDA r9L 761 | +sub r12L 762 | STA r8L 763 | LDA r9H 764 | SBC r12H 765 | STA r8H 766 | LDA r7L 767 | +sub r12L 768 | STA r10L 769 | LDA r7H 770 | SBC r12H 771 | STA r10H 772 | ASL r10L 773 | ROL r10H 774 | +LoadB r13L, $ff 775 | +CmpW r3, r4 776 | BCC DrwLin4 777 | +CmpB r11L, r11H 778 | BCC DrwLin3 779 | +LoadB r13L, $01 780 | DrwLin3 LDY r3H 781 | LDX r3L 782 | +MoveW r4, r3 783 | STY r4H 784 | STX r4L 785 | +MoveB r11H, r11L 786 | +bra DrwLin5 787 | DrwLin4 LDY r11H 788 | CPY r11L 789 | BCC DrwLin5 790 | +LoadB r13L, 1 791 | DrwLin5 PLP 792 | PHP 793 | JSR _DrawPoint 794 | +CmpW r3, r4 795 | BCS DrwLin7 796 | INC r3L 797 | BNE *+4 798 | INC r3H 799 | +bbrf 7, r8H, DrwLin6 800 | +AddW r9, r8 801 | +bra DrwLin5 802 | DrwLin6 +AddB r13L, r11L 803 | +AddW r10, r8 804 | +bra DrwLin5 805 | DrwLin7 PLP 806 | RTS 807 | 808 | DrawLine2 LDA r12L 809 | ASL 810 | STA r9L 811 | LDA r12H 812 | ROL 813 | STA r9H 814 | LDA r9L 815 | +sub r7L 816 | STA r8L 817 | LDA r9H 818 | SBC r7H 819 | STA r8H 820 | LDA r12L 821 | +sub r7L 822 | STA r10L 823 | LDA r12H 824 | SBC r7H 825 | STA r10H 826 | ASL r10L 827 | ROL r10H 828 | +LoadW r13, $ffff 829 | +CmpB r11L, r11H 830 | BCC Drw2Lin2 831 | +CmpW r3, r4 832 | BCC Drw2Lin1 833 | +LoadW r13, $0001 834 | Drw2Lin1 +MoveW r4, r3 835 | LDX r11L 836 | LDA r11H 837 | STA r11L 838 | STX r11H 839 | +bra Drw2Lin3 840 | Drw2Lin2 +CmpW r3, r4 841 | BCS Drw2Lin3 842 | +LoadW r13, $0001 843 | Drw2Lin3 PLP 844 | PHP 845 | JSR _DrawPoint 846 | +CmpB r11L, r11H 847 | BCS Drw2Lin5 848 | INC r11L 849 | +bbrf 7, r8H, Drw2Lin4 850 | +AddW r9, r8 851 | +bra Drw2Lin3 852 | Drw2Lin4 +AddW r13, r3 853 | +AddW r10, r8 854 | +bra Drw2Lin3 855 | Drw2Lin5 PLP 856 | RTS 857 | 858 | _DrawPoint 859 | PHP 860 | LDX r11L 861 | JSR _GetScanLine 862 | LDA r3L 863 | AND #%11111000 864 | TAY 865 | LDA r3H 866 | BEQ DrwPoi1 867 | INC r5H 868 | INC r6H 869 | DrwPoi1 LDA r3L 870 | AND #%00000111 871 | TAX 872 | LDA BitMask1, x 873 | PLP 874 | BMI DrwPoi4 875 | BCC DrwPoi2 876 | ORA (r6),y 877 | +bra DrwPoi3 878 | DrwPoi2 EOR #$ff 879 | AND (r6),y 880 | DrwPoi3 STA (r6),y 881 | STA (r5),y 882 | RTS 883 | DrwPoi4 PHA 884 | EOR #$ff 885 | AND (r5),y 886 | STA (r5),y 887 | PLA 888 | AND (r6),y 889 | ORA (r5),y 890 | STA (r5),y 891 | RTS 892 | 893 | _TestPoint 894 | LDX r11L 895 | JSR _GetScanLine 896 | LDA r3L 897 | AND #%11111000 898 | TAY 899 | LDA r3H 900 | BEQ *+4 901 | INC r6H 902 | LDA r3L 903 | AND #%00000111 904 | TAX 905 | LDA BitMask1,x 906 | AND (r6),y 907 | BEQ TestPoi1 908 | SEC 909 | RTS 910 | TestPoi1 CLC 911 | RTS 912 | -------------------------------------------------------------------------------- /src/kernal/files.tas: -------------------------------------------------------------------------------- 1 | 2 | ;disk and file related functions (maybe should I split vlir functions?) 3 | 4 | ;18-8-99 - ACME port 5 | 6 | _GetFile 7 | JSR UNK_5 8 | JSR FindFile 9 | +bnex GFile5 10 | JSR UNK_4 11 | +LoadW r9, dirEntryBuf 12 | +CmpBI dirEntryBuf + OFF_GFILE_TYPE, DESK_ACC 13 | BNE GFile0 14 | JMP LdDeskAcc 15 | GFile0 CMP #APPLICATION 16 | BEQ GFile1 17 | CMP #AUTO_EXEC 18 | BNE _LdFile 19 | GFile1 JMP LdApplic 20 | 21 | _LdFile 22 | JSR GetFHdrInfo 23 | +bnex GFile5 24 | +CmpBI fileHeader + O_GHSTR_TYPE, VLIR 25 | BNE GFile3 26 | LDY #OFF_DE_TR_SC 27 | LDA (r9),y 28 | STA r1L 29 | INY 30 | LDA (r9),y 31 | STA r1H 32 | JSR ReadBuff 33 | +bnex GFile5 34 | LDX #INV_RECORD 35 | LDA diskBlkBuf + 2 36 | STA r1L 37 | BEQ GFile5 38 | LDA diskBlkBuf + 3 39 | STA r1H 40 | GFile3 +bbrf 0, A885E, GFile4 41 | +MoveW A885F, r7 42 | GFile4 +LoadW r2, $ffff 43 | JSR ReadFile 44 | GFile5 RTS 45 | 46 | _FollowChain 47 | PHP 48 | SEI 49 | +PushB r3H 50 | LDY #0 51 | FChain0 LDA r1L 52 | STA (r3),y 53 | INY 54 | LDA r1H 55 | STA (r3),y 56 | INY 57 | BNE FChain1 58 | INC r3H 59 | FChain1 LDA r1L 60 | BEQ FChain2 61 | TYA 62 | PHA 63 | JSR ReadBuff 64 | PLA 65 | TAY 66 | +bnex FChain3 67 | +MoveW diskBlkBuf, r1 68 | +bra FChain0 69 | FChain2 LDX #0 70 | FChain3 +PopB r3H 71 | PLP 72 | FChain4 RTS 73 | 74 | _FindFTypes 75 | !if (useRamExp) { 76 | +CmpWI r7, ($0100+SYSTEM) 77 | bne FFTypesStart 78 | +CmpWI r6, $8b80 79 | bne FFTypesStart 80 | +LoadB DeskTopOpen, 1 81 | +LoadW r5, DeskTopName 82 | ldx #r5 83 | ldy #r6 84 | jmp CopyString 85 | FFTypesStart 86 | } 87 | PHP 88 | SEI 89 | +MoveW r6, r1 90 | +LoadB r0H, 0 91 | LDA r7H 92 | ASL 93 | ROL r0H 94 | ASL 95 | ROL r0H 96 | ASL 97 | ROL r0H 98 | ASL 99 | ROL r0H 100 | ADC r7H 101 | STA r0L 102 | BCC *+4 103 | INC r0H 104 | JSR ClearRam 105 | +SubVW 3, r6 106 | JSR Get1stDirEntry 107 | +bnex FFTypes5 108 | FFTypes1 LDY #OFF_CFILE_TYPE 109 | LDA (r5),y 110 | BEQ FFTypes4 111 | LDY #OFF_GFILE_TYPE 112 | LDA (r5),y 113 | CMP r7L 114 | BNE FFTypes4 115 | JSR GetHeaderFileName 116 | +bnex FFTypes5 117 | TYA 118 | BNE FFTypes4 119 | LDY #OFF_FNAME 120 | FFTypes2 LDA (r5),y 121 | CMP #$a0 122 | BEQ FFTypes3 123 | STA (r6),y 124 | INY 125 | CPY #OFF_FNAME + $10 126 | BNE FFTypes2 127 | FFTypes3 LDA #NULL 128 | STA (r6),y 129 | +AddVW $11, r6 130 | DEC r7H 131 | BEQ FFTypes5 132 | FFTypes4 JSR GetNxtDirEntry 133 | +bnex FFTypes5 134 | TYA 135 | BEQ FFTypes1 136 | FFTypes5 PLP 137 | RTS 138 | 139 | SetBufTSVector +LoadW r6, fileTrScTab 140 | RTS 141 | 142 | GetStartHAddy 143 | +MoveW fileHeader + O_GHST_ADDR, r7 144 | RTS 145 | 146 | SetFHeadVector +LoadW r4, fileHeader 147 | RTS 148 | 149 | _FindFile 150 | PHP 151 | SEI 152 | +SubVW 3, r6 153 | JSR Get1stDirEntry 154 | +bnex FFile7 155 | FFile1 LDY #OFF_CFILE_TYPE 156 | LDA (r5),y 157 | BEQ FFile4 158 | LDY #OFF_FNAME 159 | FFile2 LDA (r6),y 160 | BEQ FFile3 161 | CMP (r5),y 162 | BNE FFile4 163 | INY 164 | BNE FFile2 165 | FFile3 CPY #OFF_FNAME + $10 166 | BEQ FFile5 167 | LDA (r5),y 168 | INY 169 | CMP #$a0 170 | BEQ FFile3 171 | FFile4 JSR GetNxtDirEntry 172 | +bnex FFile7 173 | TYA 174 | BEQ FFile1 175 | LDX #FILE_NOT_FOUND 176 | BNE FFile7 177 | FFile5 LDY #0 178 | FFile6 LDA (r5),y 179 | STA dirEntryBuf,y 180 | INY 181 | CPY #$1e 182 | BNE FFile6 183 | LDX #NULL 184 | FFile7 PLP 185 | RTS 186 | 187 | _SetDevice 188 | CMP curDevice 189 | BEQ SetDev2 190 | PHA 191 | +CmpBI curDevice, 8 192 | BCC SetDev1 193 | CMP #12 194 | BCS SetDev1 195 | JSR ExitTurbo 196 | SetDev1 PLA 197 | STA curDevice 198 | SetDev2 CMP #8 199 | BCC SetDev3 200 | CMP #12 201 | BCS SetDev3 202 | TAY 203 | LDA _driveType,y 204 | STA curType 205 | CPY curDrive 206 | BEQ SetDev3 207 | STY curDrive 208 | +bbrf 6, sysRAMFlg, SetDev3 209 | LDA SetDevDrivesTabL - 8,y 210 | STA SetDevTab + 2 211 | LDA SetDevDrivesTabH - 8,y 212 | STA SetDevTab + 3 213 | JSR PrepForFetch 214 | JSR FetchRAM 215 | JSR PrepForFetch 216 | SetDev3 LDX #NULL 217 | RTS 218 | 219 | PrepForFetch 220 | LDY #6 221 | PFFet1 LDA r0,y 222 | TAX 223 | LDA SetDevTab,y 224 | STA r0,y 225 | TXA 226 | STA SetDevTab,y 227 | DEY 228 | BPL PFFet1 229 | RTS 230 | 231 | SetDevTab 232 | !word DISK_BASE 233 | !word $0000 234 | !word DISK_DRV_LGH 235 | !byte $00 236 | 237 | SetDevDrivesTabL 238 | !byte REUDskDrvSPC+(0*DISK_DRV_LGH) 244 | !byte >REUDskDrvSPC+(1*DISK_DRV_LGH) 245 | !byte >REUDskDrvSPC+(2*DISK_DRV_LGH) 246 | !byte >REUDskDrvSPC+(3*DISK_DRV_LGH) 247 | 248 | _GetFHdrInfo 249 | LDY #OFF_GHDR_PTR 250 | LDA (r9),y 251 | STA r1L 252 | INY 253 | LDA (r9),y 254 | STA r1H 255 | +MoveW r1, fileTrScTab 256 | JSR SetFHeadVector 257 | JSR GetBlock 258 | +bnex GFHName4 259 | LDY #OFF_DE_TR_SC 260 | LDA (r9),y 261 | STA r1L 262 | INY 263 | LDA (r9),y 264 | STA r1H 265 | jmp GetStartHAddy 266 | 267 | GetHeaderFileName 268 | LDX #0 269 | LDA r10L 270 | ORA r10H 271 | BEQ GFHName2 272 | LDY #OFF_GHDR_PTR 273 | LDA (r5),y 274 | STA r1L 275 | INY 276 | LDA (r5),y 277 | STA r1H 278 | JSR SetFHeadVector 279 | JSR GetBlock 280 | +bnex GFHName4 281 | TAY 282 | GFHName1 LDA (r10),y 283 | BEQ GFHName2 284 | CMP fileHeader+O_GHFNAME,y 285 | BNE GFHName3 286 | INY 287 | BNE GFHName1 288 | GFHName2 LDY #0 289 | RTS 290 | GFHName3 LDY #$ff 291 | GFHName4 RTS 292 | 293 | _LdDeskAcc 294 | +MoveB r10L, A885D 295 | JSR GetFHdrInfo 296 | +bnex LDAcc1 297 | !if (useRamExp) { 298 | +PushW r1 299 | jsr RamExpGetStat 300 | +MoveW fileHeader+O_GHST_ADDR, diskBlkBuf+DACC_ST_ADDR 301 | lda fileHeader+O_GHEND_ADDR+1 302 | +sub diskBlkBuf+DACC_ST_ADDR+1 303 | sta diskBlkBuf+DACC_LGH 304 | jsr RamExpPutStat 305 | +MoveW diskBlkBuf+DACC_ST_ADDR, r0 306 | +MoveB diskBlkBuf+DACC_LGH, r2H 307 | +MoveB diskBlkBuf+RAM_EXP_1STFREE, r1L 308 | +LoadB r1H, 0 309 | jsr RamExpWrite 310 | +PopW r1 311 | } else { 312 | +PushW r1 313 | JSR SaveSwapFile 314 | +PopW r1 315 | +bnex LDAcc1 316 | } 317 | JSR GetStartHAddy 318 | +LoadW r2, $ffff 319 | JSR ReadFile 320 | +bnex LDAcc1 321 | JSR DlgBoxPrep 322 | JSR UseSystemFont 323 | JSR InitGEOEnv 324 | +MoveB A885D, r10L 325 | +PopW DeskAccPC 326 | TSX 327 | STX DeskAccSP 328 | LDX fileHeader+O_GHST_VEC+1 329 | LDA fileHeader+O_GHST_VEC 330 | JMP _MNLP 331 | +PopW r1 332 | LDAcc1 RTS 333 | 334 | _RstrAppl 335 | !if (useRamExp) { 336 | jsr RamExpGetStat 337 | +MoveW diskBlkBuf+DACC_ST_ADDR, r0 338 | +MoveB diskBlkBuf+DACC_LGH, r2H 339 | +MoveB diskBlkBuf+RAM_EXP_1STFREE, r1L 340 | +LoadB r1H, 0 341 | jsr RamExpRead 342 | jsr Dialog_2 343 | lda #0 344 | } else { 345 | LDA #>SwapFileName 346 | STA r6H 347 | LDA #SwapFileName 354 | STA r0H 355 | LDA #diskBlkBuf 449 | ADC #0 450 | STA r5H 451 | LDY #$1d 452 | SGDEnt1 LDA dirEntryBuf,y 453 | STA (r5),y 454 | DEY 455 | BPL SGDEnt1 456 | JSR SGDCopyDate 457 | JMP WriteBuff 458 | 459 | SGDCopyDate LDY #$17 460 | SGDCDat1 LDA dirEntryBuf+$ff,y 461 | STA (r5),y 462 | INY 463 | CPY #$1c 464 | BNE SGDCDat1 465 | SGDEnt2 RTS 466 | 467 | _BldGDirEntry 468 | LDY #$1d 469 | LDA #NULL 470 | BGDEnt1 STA dirEntryBuf,y 471 | DEY 472 | BPL BGDEnt1 473 | TAY 474 | LDA (r9),y 475 | STA r3L 476 | INY 477 | LDA (r9),y 478 | STA r3H 479 | STY r1H 480 | DEY 481 | LDX #OFF_FNAME 482 | BGDEnt2 LDA (r3),y 483 | BNE BGDEnt4 484 | STA r1H 485 | BGDEnt3 LDA #$a0 486 | BGDEnt4 STA dirEntryBuf,x 487 | INX 488 | INY 489 | CPY #16 490 | BEQ BGDEnt5 491 | LDA r1H 492 | BNE BGDEnt2 493 | BEQ BGDEnt3 494 | BGDEnt5 LDY #O_GHCMDR_TYPE 495 | LDA (r9),y 496 | STA dirEntryBuf+OFF_CFILE_TYPE 497 | LDY #O_GHSTR_TYPE 498 | LDA (r9),y 499 | STA dirEntryBuf+OFF_GSTRUC_TYPE 500 | LDY #NULL 501 | STY fileHeader 502 | DEY 503 | STY fileHeader+1 504 | +MoveW fileTrScTab, dirEntryBuf+OFF_GHDR_PTR 505 | JSR LoKernal 506 | +MoveW fileTrScTab+2, dirEntryBuf+OFF_DE_TR_SC 507 | +CmpBI dirEntryBuf+OFF_GSTRUC_TYPE, VLIR 508 | BNE BGDEnt6 509 | JSR LoKernal 510 | BGDEnt6 LDY #O_GHGEOS_TYPE 511 | LDA (r9),y 512 | STA dirEntryBuf+OFF_GFILE_TYPE 513 | +MoveW r2, dirEntryBuf+OFF_SIZE 514 | BGDEnt7 RTS 515 | 516 | _DeleteFile 517 | JSR FindNDelete 518 | +bnex BGDEnt7 519 | DelFile1 +LoadW r9, dirEntryBuf 520 | _FreeFile PHP 521 | SEI 522 | JSR GetDirHead 523 | +bnex DelFile4 524 | LDY #OFF_GHDR_PTR 525 | LDA (r9),y 526 | BEQ DelFile2 527 | STA r1L 528 | INY 529 | LDA (r9),y 530 | STA r1H 531 | JSR FreeBlockChain 532 | +bnex DelFile4 533 | DelFile2 LDY #OFF_DE_TR_SC 534 | LDA (r9),y 535 | STA r1L 536 | INY 537 | LDA (r9),y 538 | STA r1H 539 | JSR FreeBlockChain 540 | +bnex DelFile4 541 | LDY #OFF_GSTRUC_TYPE 542 | LDA (r9),y 543 | !if (onlyVLIR) { 544 | beq DelFile3 545 | } else { 546 | CMP #VLIR 547 | BNE DelFile3 548 | } 549 | JSR DeleteVlirChains 550 | +bnex DelFile4 551 | DelFile3 JSR PutDirHead 552 | DelFile4 PLP 553 | RTS 554 | 555 | DeleteVlirChains 556 | LDY #0 557 | DelVlirC1 LDA diskBlkBuf,y 558 | STA fileHeader,y 559 | INY 560 | BNE DelVlirC1 561 | LDY #2 562 | DelVlirC2 TYA 563 | BEQ DelVlirC3 564 | LDA fileHeader,y 565 | STA r1L 566 | INY 567 | LDA fileHeader,y 568 | STA r1H 569 | INY 570 | LDA r1L 571 | BEQ DelVlirC2 572 | TYA 573 | PHA 574 | JSR FreeBlockChain 575 | PLA 576 | TAY 577 | +beqx DelVlirC2 578 | DelVlirC3 RTS 579 | 580 | FreeBlockChain 581 | +MoveW r1, r6 582 | +LoadW r2, 0 583 | FreeBlC1 JSR FreeBlock 584 | +bnex FreeBlC4 585 | INC r2L 586 | BNE FreeBlC2 587 | INC r2H 588 | FreeBlC2 +PushW r2 589 | +MoveW r6, r1 590 | JSR ReadBuff 591 | +PopW r2 592 | +bnex FreeBlC4 593 | LDA diskBlkBuf 594 | BEQ FreeBlC3 595 | STA r6L 596 | LDA diskBlkBuf+1 597 | STA r6H 598 | +bra FreeBlC1 599 | FreeBlC3 LDX #NULL 600 | FreeBlC4 RTS 601 | 602 | FindNDelete 603 | +MoveW r0, r6 604 | JSR FindFile 605 | +bnex FreeBlC4 606 | LDA #0 607 | TAY 608 | STA (r5),y 609 | jmp WriteBuff 610 | 611 | _FastDelFile 612 | +PushW r3 613 | JSR FindNDelete 614 | +PopW r3 615 | +bnex FreeBlC4 616 | 617 | FreeChainByTab 618 | +PushW r3 619 | JSR GetDirHead 620 | +PopW r3 621 | FCByTab1 LDY #0 622 | LDA (r3),y 623 | BEQ FCByTab2 624 | STA r6L 625 | INY 626 | LDA (r3),y 627 | STA r6H 628 | JSR FreeBlock 629 | +bnex FreeBlC4 630 | +AddVW 2, r3 631 | +bra FCByTab1 632 | FCByTab2 jmp PutDirHead 633 | 634 | _RenameFile 635 | +PushW r0 636 | JSR FindFile 637 | +PopW r0 638 | +bnex FreeBlC4 ;->RTS 639 | +AddVW OFF_FNAME, r5 640 | LDY #0 641 | RenFile1 LDA (r0),y 642 | BEQ RenFile2 643 | STA (r5),y 644 | INY 645 | CPY #16 646 | BCC RenFile1 647 | BCS RenFile3 648 | RenFile2 LDA #$a0 649 | STA (r5),y 650 | INY 651 | CPY #16 652 | BCC RenFile2 653 | RenFile3 jmp WriteBuff 654 | 655 | _OpenRecordFile 656 | !if (useRamExp) { 657 | lda DeskTopOpen 658 | bmi OpRFile1 659 | +LoadW r6, DeskTopName 660 | ldx #r0 661 | ldy #r6 662 | jsr CmpString 663 | bne OpRFile1 664 | +LoadB DeskTopOpen,1 665 | ldx #0 666 | rts 667 | OpRFile1 +LoadB DeskTopOpen,0 668 | } 669 | +MoveW r0, r6 670 | JSR FindFile 671 | +bnex OpRecFile4 672 | LDX #10 673 | LDY #OFF_CFILE_TYPE 674 | LDA (r5),y 675 | AND #%00111111 676 | CMP #USR 677 | BNE OpRecFile4 678 | LDY #OFF_GSTRUC_TYPE 679 | LDA (r5),y 680 | !if (onlyVLIR) { 681 | beq OpRecFile4 682 | } else { 683 | CMP #VLIR 684 | BNE OpRecFile4 685 | } 686 | LDY #OFF_DE_TR_SC 687 | LDA (r5),y 688 | STA RecordTableTS 689 | INY 690 | LDA (r5),y 691 | STA RecordTableTS+1 692 | +MoveW r1, RecordDirTS 693 | +MoveW r5, RecordDirOffs 694 | +MoveW dirEntryBuf+OFF_SIZE, fileSize 695 | JSR GetVLIRTab 696 | +bnex OpRecFile4 697 | STA usedRecords 698 | LDY #2 699 | OpRecFile1 LDA fileHeader,y 700 | ORA fileHeader+1,y 701 | BEQ OpRecFile2 702 | INC usedRecords 703 | INY 704 | INY 705 | BNE OpRecFile1 706 | OpRecFile2 LDY #0 707 | LDA usedRecords 708 | BNE OpRecFile3 709 | DEY 710 | OpRecFile3 STY curRecord 711 | LDX #NULL 712 | STX fileWritten 713 | RTS 714 | 715 | _CloseRecordFile 716 | JSR _UpdateRecordFile 717 | OpRecFile4 718 | +LoadB RecordTableTS, NULL 719 | RTS 720 | 721 | _UpdateRecordFile 722 | LDX #0 723 | LDA fileWritten 724 | BEQ URecFile1 725 | JSR PutVLIRTab 726 | +bnex URecFile1 727 | +MoveW RecordDirTS, r1 728 | JSR ReadBuff 729 | +bnex URecFile1 730 | +MoveW RecordDirOffs, r5 731 | JSR SGDCopyDate 732 | LDY #OFF_SIZE 733 | LDA fileSize 734 | STA (r5),y 735 | INY 736 | LDA fileSize+1 737 | STA (r5),y 738 | JSR WriteBuff 739 | +bnex URecFile1 740 | JSR PutDirHead 741 | LDA #NULL 742 | STA fileWritten 743 | URecFile1 RTS 744 | 745 | !if (useRamExp) { 746 | _NextRecord 747 | LDA curRecord 748 | +addv 1 749 | +bra _PointRcrdSt 750 | _PreviousRecord 751 | LDA curRecord 752 | +subv 1 753 | +bra _PointRcrdSt 754 | 755 | _PointRecord ldx DeskTopOpen 756 | beq _PointRcrdSt 757 | sta DeskTopRecord 758 | ldx #0 759 | rts 760 | _PointRcrdSt 761 | } else { 762 | _NextRecord 763 | LDA curRecord 764 | +addv 1 765 | +bra _PointRecord 766 | _PreviousRecord 767 | LDA curRecord 768 | +subv 1 769 | _PointRecord 770 | } 771 | 772 | TAX 773 | BMI PoiRecord1 774 | CMP usedRecords 775 | BCS PoiRecord1 776 | STA curRecord 777 | JSR GetVLIRChainTS 778 | LDY r1L 779 | LDX #0 780 | BEQ PoiRecord2 781 | PoiRecord1 LDX #INV_RECORD 782 | PoiRecord2 LDA curRecord 783 | RTS 784 | 785 | _DeleteRecord 786 | LDX #INV_RECORD 787 | LDA curRecord 788 | BMI DelRecord3 789 | JSR ReadyForUpdVLIR 790 | +bnex DelRecord3 791 | JSR GetVLIRChainTS 792 | +MoveB curRecord, r0L 793 | JSR MoveBackVLIRTab 794 | +bnex DelRecord3 795 | +CmpB curRecord, usedRecords 796 | BCC DelRecord1 797 | DEC curRecord 798 | DelRecord1 LDX #NULL 799 | LDA r1L 800 | BEQ DelRecord3 801 | JSR FreeBlockChain 802 | +bnex DelRecord3 803 | +SubB r2L, fileSize 804 | BCS DelRecord2 805 | DEC fileSize+1 806 | DelRecord2 LDX #NULL 807 | DelRecord3 RTS 808 | 809 | _InsertRecord 810 | LDX #INV_RECORD 811 | LDA curRecord 812 | BMI DelRecord3 813 | JSR ReadyForUpdVLIR 814 | +bnex DelRecord3 815 | LDA curRecord 816 | STA r0L 817 | jmp MoveForwVLIRTab 818 | 819 | _AppendRecord 820 | JSR ReadyForUpdVLIR 821 | +bnex AppRecord1 822 | LDA curRecord 823 | +addv 1 824 | STA r0L 825 | JSR MoveForwVLIRTab 826 | +bnex AppRecord1 827 | +MoveB r0L, curRecord 828 | AppRecord1 RTS 829 | 830 | _ReadRecord 831 | !if (useRamExp) { 832 | ldx DeskTopOpen 833 | beq ReaRec0 834 | jsr RamExpGetStat 835 | ldx DeskTopRecord 836 | lda diskBlkBuf+DTOP_CHAIN,x 837 | sta r1L 838 | lda diskBlkBuf+DTOP_CHAIN+1,x 839 | +sub r1L 840 | sta r2H 841 | +LoadB r1H, 0 842 | +MoveW r7, r0 843 | jsr RamExpRead 844 | ldx #0 845 | rts 846 | ReaRec0 847 | } 848 | LDX #INV_RECORD 849 | LDA curRecord 850 | BMI ReaRecord1 851 | JSR GetVLIRChainTS 852 | LDA r1L 853 | TAX 854 | BEQ ReaRecord1 855 | JSR ReadFile 856 | LDA #$ff 857 | ReaRecord1 RTS 858 | 859 | _WriteRecord 860 | LDX #INV_RECORD 861 | LDA curRecord 862 | BMI ReaRecord1 863 | +PushW r2 864 | JSR ReadyForUpdVLIR 865 | +PopW r2 866 | +bnex ReaRecord1 867 | JSR GetVLIRChainTS 868 | LDA r1L 869 | BNE WriRecord1 870 | LDX #0 871 | LDA r2L 872 | ORA r2H 873 | BEQ ReaRecord1 874 | BNE WriRecord3 875 | WriRecord1 +PushW r2 876 | +PushW r7 877 | JSR FreeBlockChain 878 | +MoveB r2L, r0L 879 | +PopW r7 880 | +PopW r2 881 | +bnex SVLIRTab1 882 | +SubB r0L, fileSize 883 | BCS WriRecord2 884 | DEC fileSize+1 885 | WriRecord2 LDA r2L 886 | ORA r2H 887 | BEQ WriRecord4 888 | WriRecord3 JMP WriteVLIRChain 889 | WriRecord4 LDY #$FF 890 | STY r1H 891 | INY 892 | STY r1L 893 | jmp PutVLIRChainTS 894 | 895 | GetVLIRTab 896 | JSR SetVLIRTable 897 | +bnex SVLIRTab1 898 | jmp GetBlock 899 | 900 | PutVLIRTab 901 | JSR SetVLIRTable 902 | +bnex SVLIRTab1 903 | jmp PutBlock 904 | 905 | SetVLIRTable LDX #UNOPENED_VLIR 906 | LDA RecordTableTS 907 | BEQ SVLIRTab1 908 | STA r1L 909 | LDA RecordTableTS+1 910 | STA r1H 911 | JSR SetFHeadVector 912 | LDX #NULL 913 | SVLIRTab1 RTS 914 | 915 | MoveBackVLIRTab 916 | LDX #INV_RECORD 917 | LDA r0L 918 | BMI MBVLIRTab3 919 | ASL 920 | TAY 921 | LDA #$7e 922 | +sub r0L 923 | ASL 924 | TAX 925 | BEQ MBVLIRTab2 926 | MBVLIRTab1 LDA fileHeader+4,y 927 | STA fileHeader+2,y 928 | INY 929 | DEX 930 | BNE MBVLIRTab1 931 | MBVLIRTab2 STX fileHeader+$fe 932 | STX fileHeader+$ff 933 | DEC usedRecords 934 | MBVLIRTab3 RTS 935 | 936 | MoveForwVLIRTab 937 | LDX #OUT_OF_RECORDS 938 | +CmpBI usedRecords, $7f 939 | BCS MFVLIRTab3 940 | LDX #INV_RECORD 941 | LDA r0L 942 | BMI MFVLIRTab3 943 | LDY #$fe 944 | LDA #$7e 945 | +sub r0L 946 | ASL 947 | TAX 948 | BEQ MFVLIRTab2 949 | MFVLIRTab1 LDA fileHeader-1,y 950 | STA fileHeader+1,y 951 | DEY 952 | DEX 953 | BNE MFVLIRTab1 954 | MFVLIRTab2 TXA 955 | STA fileHeader,y 956 | LDA #$ff 957 | STA fileHeader+1,y 958 | INC usedRecords 959 | MFVLIRTab3 RTS 960 | 961 | GetVLIRChainTS 962 | LDA curRecord 963 | ASL 964 | TAY 965 | LDA fileHeader+2,y 966 | STA r1L 967 | LDA fileHeader+3,y 968 | STA r1H 969 | RTS 970 | 971 | PutVLIRChainTS 972 | LDA curRecord 973 | ASL 974 | TAY 975 | LDA r1L 976 | STA fileHeader+2,y 977 | LDA r1H 978 | STA fileHeader+3,y 979 | RTS 980 | 981 | WriteVLIRChain 982 | JSR SetBufTSVector 983 | +PushW r7 984 | JSR BlkAlloc 985 | +PopW r7 986 | +bnex WVLIRChain1 987 | +PushB r2L 988 | JSR SetBufTSVector 989 | JSR WriteFile 990 | +PopB r2L 991 | +bnex WVLIRChain1 992 | +MoveW fileTrScTab, r1 993 | JSR PutVLIRChainTS 994 | +bnex WVLIRChain1 995 | +AddB r2L, fileSize 996 | BCC WVLIRChain1 997 | INC fileSize+1 998 | WVLIRChain1 RTS 999 | 1000 | ReadyForUpdVLIR 1001 | LDX #NULL 1002 | LDA fileWritten 1003 | BNE RFUpdVLIR1 1004 | JSR GetDirHead 1005 | +bnex RFUpdVLIR1 1006 | LDA #TRUE 1007 | STA fileWritten 1008 | RFUpdVLIR1 RTS 1009 | 1010 | _ReadByte 1011 | LDY r5H 1012 | CPY r5L 1013 | BEQ ReadByt2 1014 | LDA (r4),y 1015 | INC r5H 1016 | LDX #NULL 1017 | ReadByt1 RTS 1018 | ReadByt2 LDX #BFR_OVERFLOW 1019 | LDA r1L 1020 | BEQ ReadByt1 1021 | JSR GetBlock 1022 | +bnex ReadByt1 1023 | LDY #2 1024 | STY r5H 1025 | DEY 1026 | LDA (r4),y 1027 | STA r1H 1028 | TAX 1029 | DEY 1030 | LDA (r4),y 1031 | STA r1L 1032 | BEQ ReadByt3 1033 | LDX #$ff 1034 | ReadByt3 INX 1035 | STX r5L 1036 | +bra _ReadByte 1037 | 1038 | _GetPtrCurDkNm 1039 | LDY curDrive 1040 | LDA DkNmTab-8,Y 1041 | STA zpage,X 1042 | LDA DkNmTab-4,Y 1043 | STA zpage+1,X 1044 | RTS 1045 | -------------------------------------------------------------------------------- /src/kernal/main.tas: -------------------------------------------------------------------------------- 1 | 2 | ;26.6.99 - modularized source, seems to work flawlessly 3 | ;this file:system core - all address-aligned data (for compatibility), core (EnterDeskTop) and init stuff 4 | 5 | 6 | ;GEOS Kernal 7 | ;reassembled by Maciej 'YTM/Alliance' Witkowiak 8 | ;5-9,13.2.99, 1-7.3.99, 12.3.99, 15-20.3.99 9 | ;changes 30.3, 3.4 10 | ;18.8 - ACME port 11 | 12 | ;bug in alternate version of Menu_5 - there's no delay between item inversion 13 | ;5.4 - ramSwapFile support 14 | ;5,6.4 - ramEnterDeskTop support 15 | ;20.4 - 2MHz support 16 | 17 | ;-------------------------------------------- 18 | ;IMPORTANT! DO NOT CHANGE ANYTHING BELOW, UP TO 'DESK TOP' STRING. 19 | ;DOING SO WILL CREATE FATAL INCOMPATIBILITES! 20 | ;-------------------------------------------- 21 | 22 | JMP BootKernal ;C01B 23 | JMP InitKernal ;5000 24 | 25 | bootName !text "GEOS BOOT" ;c006 26 | version !byte $20 ;c00f 27 | nationality !byte $00,$00 28 | sysFlgCopy !byte $00 ;c012 29 | c128Flag !byte $00 30 | !byte $05,$00,$00,$00 31 | dateCopy !byte 88,4,20 ;c018 32 | 33 | 34 | ;-------------------------------------------- 35 | 36 | BitMask1 !byte $80, $40, $20, $10, $08, $04, $02 37 | BitMask2 !byte $01, $02, $04, $08, $10, $20, $40, $80 38 | BitMask3 !byte $00, $80, $c0, $e0, $f0, $f8, $fc, $fe 39 | BitMask4 !byte $7f, $3f, $1f, $0f, $07, $03, $01, $00 40 | 41 | ;c418 42 | VIC_IniTbl !byte $00, $00, $00, $00, $00, $00, $00, $00 43 | !byte $00, $00, $00, $00, $00, $00, $00, $00 44 | !byte $f8, $3b, $fb, $aa, $aa, $01, $08, $00 45 | !byte $38, $0f, $01, $00, $00, $00 46 | 47 | ;caeb 48 | LineTabL !byte $00, $40, $80, $c0, $00, $40, $80, $c0 49 | !byte $00, $40, $80, $c0, $00, $40, $80, $c0 50 | !byte $00, $40, $80, $c0, $00, $40, $80, $c0 51 | !byte $00 52 | ;cb04 53 | LineTabH !byte $a0, $a1, $a2, $a3, $a5, $a6, $a7, $a8 54 | !byte $aa, $ab, $ac, $ad, $af, $b0, $b1, $b2 55 | !byte $b4, $b5, $b6, $b7, $b9, $ba, $bb, $bc 56 | !byte $be 57 | 58 | _PanicDB_DT ;cfd3 59 | !byte DEF_DB_POS | 1 60 | !byte DBTXTSTR, TXT_LN_X, TXT_LN_1_Y 61 | !word _PanicDB_Str 62 | !byte NULL 63 | 64 | _PanicDB_Str ;cfda 65 | !byte BOLDON 66 | !text "System error near $" 67 | _PanicAddy !text "xxxx" ;cfee 68 | !byte NULL 69 | 70 | FontTVar1 !byte 0 ;e391 71 | FontTVar2 !word 0 ;e392 72 | ;ccb0 73 | SprTabL !byte spr0pic, >spr1pic, >spr2pic, >spr3pic 77 | !byte >spr4pic, >spr5pic, >spr6pic, >spr7pic 78 | 79 | PutCharTabL !byte DoBACKSPACE, >DoTAB ;e55f 91 | !byte >DoLF, >DoHOME 92 | !byte >DoUPLINE, >DoCR 93 | !byte >DoULINEON, >DoULINEOFF 94 | !byte >DoESC_GRAPHICS, >DoESC_RULER 95 | !byte >DoREV_ON, >DoREV_OFF 96 | !byte >DoGOTOX, >DoGOTOY 97 | !byte >DoGOTOXY, >DoNEWCARDSET 98 | !byte >DoBOLDON, >DoITALICON 99 | !byte >DoOUTLINEON, >DoPLAINTEXT 100 | 101 | DecTabL !byte <1, <10, <100, <1000, <10000 ;e941 102 | DecTabH !byte >1, >10, >100, >1000, >10000 ;e946 103 | 104 | daysTab ;fe17 105 | !byte 31, 28, 31, 30, 31, 30 106 | !byte 31, 31, 30, 31, 30, 31 107 | 108 | DeskTopOpen !byte 0 ;these two bytes are here just 109 | DeskTopRecord !byte 0 ;to keep OS_JUMPTAB at $c100 110 | !byte 0,0,0 ;three really unused 111 | ;-------------------------------------------- 112 | ;here the JumpTable begins, DO NOT CHANGE!!! 113 | ; *= OS_JUMPTAB 114 | 115 | InterruptMain JMP _InterruptMain ;c100 116 | InitProcesses JMP _InitProcesses ;c103 117 | RestartProcess JMP _RestartProcess ;c106 118 | EnableProcess JMP _EnableProcess ;c109 119 | BlockProcess JMP _BlockProcess ;c10c 120 | UnBlockProcess JMP _UnBlockProcess ;c10f 121 | FreezeProcess JMP _FreezeProcess ;c112 122 | UnFreezeProcess JMP _UnFreezeProcess ;c115 123 | HorizontalLine JMP _HorizontalLine ;c118 124 | InvertLine JMP _InvertLine ;c11d 125 | RecoverLine JMP _RecoverLine ;c11e 126 | VerticalLine JMP _VerticalLine ;c121 127 | Rectangle JMP _Rectangle ;c124 128 | FrameRectangle JMP _FrameRectangle ;c127 129 | InvertRectangle JMP _InvertRectangle ;c12a 130 | RecoverRectangle JMP _RecoverRectangle ;c12d 131 | DrawLine JMP _DrawLine ;c130 132 | DrawPoint JMP _DrawPoint ;c133 133 | GraphicsString JMP _GraphicsString ;c136 134 | SetPattern JMP _SetPattern ;c139 135 | GetScanLine JMP _GetScanLine ;c13c 136 | TestPoint JMP _TestPoint ;c13f 137 | BitmapUp JMP _BitmapUp ;c142 138 | PutChar JMP _PutChar ;c145 139 | PutString JMP _PutString ;c148 140 | UseSystemFont JMP _UseSystemFont ;c14b 141 | StartMouseMode JMP _StartMouseMode ;c14e 142 | DoMenu JMP _DoMenu ;c151 143 | RecoverMenu JMP _RecoverMenu ;c154 144 | RecoverAllMenus JMP _RecoverAllMenus ;c157 145 | DoIcons JMP _DoIcons ;c15a 146 | DShiftLeft JMP _DShiftLeft ;c15d 147 | BBMult JMP _BBMult ;c160 148 | BMult JMP _BMult ;c163 149 | DMult JMP _DMult ;c166 150 | Ddiv JMP _Ddiv ;c169 151 | DSDiv JMP _DSDiv ;c16c 152 | Dabs JMP _Dabs ;c16f 153 | Dnegate JMP _Dnegate ;c172 154 | Ddec JMP _Ddec ;c175 155 | ClearRam JMP _ClearRam ;c178 156 | FillRam JMP _FillRam ;c17b 157 | MoveData JMP _MoveData ;c17e 158 | InitRam JMP _InitRam ;c181 159 | PutDecimal JMP _PutDecimal ;c184 160 | GetRandom JMP _GetRandom ;c187 161 | MouseUp JMP _MouseUp ;c18a 162 | MouseOff JMP _MouseOff ;c18d 163 | DoPreviousMenu JMP _DoPreviousMenu ;c190 164 | ReDoMenu JMP _ReDoMenu ;c193 165 | GetSerialNumber JMP _GetSerialNumber ;c196 166 | Sleep JMP _Sleep ;c199 167 | ClearMouseMode JMP _ClearMouseMode ;c19c 168 | i_Rectangle JMP _i_Rectangle ;c19f 169 | i_FrameRectangle JMP _i_FrameRectangle ;c1a2 170 | i_RecoverRectangle JMP _i_RecoverRectangle ;c1a5 171 | i_GraphicsString JMP _i_GraphicsString ;c1a8 172 | i_BitmapUp JMP _i_BitmapUp ;c1ab 173 | i_PutString JMP _i_PutString ;c1ae 174 | GetRealSize JMP _GetRealSize ;c1b1 175 | i_FillRam JMP _i_FillRam ;c1b4 176 | i_MoveData JMP _i_MoveData ;c1b7 177 | GetString JMP _GetString ;c1ba 178 | GotoFirstMenu JMP _GotoFirstMenu ;c1bd 179 | InitTextPrompt JMP _InitTextPrompt ;c1c0 180 | MainLoop JMP _MainLoop ;c1c3 181 | DrawSprite JMP _DrawSprite ;c1c6 182 | GetCharWidth JMP _GetCharWidth ;c1c9 183 | LoadCharSet JMP _LoadCharSet ;c1cc 184 | PosSprite JMP _PosSprite ;c1cf 185 | EnablSprite JMP _EnablSprite ;c1d2 186 | DisablSprite JMP _DisablSprite ;c1d5 187 | CallRoutine JMP _CallRoutine ;c1d8 188 | CalcBlksFree JMP (_CalcBlksFree) ;c1db 189 | ChkDkGEOS JMP (_ChkDkGEOS) ;c1de 190 | NewDisk JMP (_NewDisk) ;c1e1 191 | GetBlock JMP (_GetBlock) ;c1e4 192 | PutBlock JMP (_PutBlock) ;c1e7 193 | SetGEOSDisk JMP (_SetGEOSDisk) ;c1ea 194 | SaveFile JMP _SaveFile ;c1ed 195 | SetGDirEntry JMP _SetGDirEntry ;c1f0 196 | BldGDirEntry JMP _BldGDirEntry ;c1f3 197 | GetFreeDirBlk JMP (_GetFreeDirBlk) ;c1f6 198 | WriteFile JMP _WriteFile ;c1f9 199 | BlkAlloc JMP (_BlkAlloc) ;c1fc 200 | ReadFile JMP _ReadFile ;c1ff 201 | SmallPutChar JMP _SmallPutChar ;c202 202 | FollowChain JMP _FollowChain ;c205 203 | GetFile JMP _GetFile ;c208 204 | FindFile JMP _FindFile ;c20b 205 | CRC JMP _CRC ;c20e 206 | LdFile JMP _LdFile ;c211 207 | EnterTurbo JMP (_EnterTurbo) ;c214 208 | LdDeskAcc JMP _LdDeskAcc ;c217 209 | ReadBlock JMP (_ReadBlock) ;c21a 210 | LdApplic JMP _LdApplic ;c21d 211 | WriteBlock JMP (_WriteBlock) ;c220 212 | VerWriteBlock JMP (_VerWriteBlock) ;c223 213 | FreeFile JMP _FreeFile ;c226 214 | GetFHdrInfo JMP _GetFHdrInfo ;c229 215 | EnterDeskTop JMP _EnterDeskTop ;c22c 216 | StartAppl JMP _StartAppl ;c22f 217 | ExitTurbo JMP (_ExitTurbo) ;c232 218 | PurgeTurbo JMP (_PurgeTurbo) ;c235 219 | DeleteFile JMP _DeleteFile ;c238 220 | FindFTypes JMP _FindFTypes ;c23b 221 | RstrAppl JMP _RstrAppl ;c23e 222 | ToBASIC JMP _ToBASIC ;c241 223 | FastDelFile JMP _FastDelFile ;c244 224 | GetDirHead JMP (_GetDirHead) ;c247 225 | PutDirHead JMP (_PutDirHead) ;c24a 226 | NxtBlkAlloc JMP (_NxtBlkAlloc) ;c24d 227 | ImprintRectangle JMP _ImprintRectangle ;c250 228 | i_ImprintRectangle JMP _i_ImprintRectangle ;c253 229 | DoDlgBox JMP _DoDlgBox ;c256 230 | RenameFile JMP _RenameFile ;c259 231 | InitForIO JMP (_InitForIO) ;c25c 232 | DoneWithIO JMP (_DoneWithIO) ;c25f 233 | DShiftRight JMP _DShiftRight ;c262 234 | CopyString JMP _CopyString ;c265 235 | CopyFString JMP _CopyFString ;c268 236 | CmpString JMP _CmpString ;c26b 237 | CmpFString JMP _CmpFString ;c26e 238 | FirstInit JMP _FirstInit ;c271 239 | OpenRecordFile JMP _OpenRecordFile ;c274 240 | CloseRecordFile JMP _CloseRecordFile ;c277 241 | NextRecord JMP _NextRecord ;c27a 242 | PreviousRecord JMP _PreviousRecord ;c27d 243 | PointRecord JMP _PointRecord ;c280 244 | DeleteRecord JMP _DeleteRecord ;c283 245 | InsertRecord JMP _InsertRecord ;c286 246 | AppendRecord JMP _AppendRecord ;c289 247 | ReadRecord JMP _ReadRecord ;c28c 248 | WriteRecord JMP _WriteRecord ;c28f 249 | SetNextFree JMP (_SetNextFree) ;c292 250 | UpdateRecordFile JMP _UpdateRecordFile ;c295 251 | GetPtrCurDkNm JMP _GetPtrCurDkNm ;c298 252 | PromptOn JMP _PromptOn ;c29b 253 | PromptOff JMP _PromptOff ;c29e 254 | OpenDisk JMP (_OpenDisk) ;c2a1 255 | DoInlineReturn JMP _DoInlineReturn ;c2a4 256 | GetNextChar JMP _GetNextChar ;c2a7 257 | BitmapClip JMP _BitmapClip ;c2aa 258 | FindBAMBit JMP (_FindBAMBit) ;c2ad 259 | SetDevice JMP _SetDevice ;c2b0 260 | IsMseInRegion JMP _IsMseInRegion ;c2b3 261 | ReadByte JMP _ReadByte ;c2b6 262 | FreeBlock JMP (_FreeBlock) ;c2b9 263 | ChangeDiskDevice JMP (_ChangeDiskDevice) ;c2bc 264 | RstrFrmDialogue JMP _RstrFrmDialogue ;c2bf 265 | Panic JMP _Panic ;c2c2 266 | BitOtherClip JMP _BitOtherClip ;c2c5 267 | !if (REUPresent) { 268 | StashRAM JMP _StashRAM ;c2c8 269 | FetchRAM JMP _FetchRAM ;c2cb 270 | SwapRAM JMP _SwapRAM ;c2ce 271 | VerifyRAM JMP _VerifyRAM ;c2d1 272 | DoRAMOp JMP _DoRAMOp ;c2d4 273 | } else { 274 | StashRAM LDX #DEV_NOT_FOUND ;c2c8 275 | RTS 276 | FetchRAM LDX #DEV_NOT_FOUND ;c2cb 277 | RTS 278 | SwapRAM LDX #DEV_NOT_FOUND ;c2ce 279 | RTS 280 | VerifyRAM LDX #DEV_NOT_FOUND ;c2d1 281 | RTS 282 | DoRAMOp LDX #DEV_NOT_FOUND ;c2d4 283 | RTS 284 | } 285 | ;here the JumpTable ends 286 | ;-------------------------------------------- 287 | 288 | DkNmTab !byte DrACurDkNm, >DrBCurDkNm 291 | !byte >DrCCurDkNm, >DrDCurDkNm 292 | 293 | _InterruptMain 294 | JSR ProcessMouse ;c2d7 295 | JSR _ProcessTimers 296 | JSR _ProcessDelays 297 | JSR ProcessCursor 298 | JMP _GetRandom 299 | 300 | _CallRoutine ;c59f 301 | CMP #0 302 | BNE CRou1 303 | CPX #0 304 | BEQ CRou2 305 | CRou1 STA CallRLo ;c5a7 306 | STX CallRHi 307 | JMP (CallRLo) 308 | CRou2 RTS ;c5ae 309 | 310 | _DoInlineReturn ;c5af 311 | +add returnAddress 312 | STA returnAddress 313 | BCC DILR1 314 | INC returnAddress+1 315 | DILR1 PLP ;c5b8 316 | JMP (returnAddress) 317 | 318 | SetVICRegs STY r1L ;c5bc 319 | LDY #0 320 | SVR0 LDA (r0),Y ;c5c0 321 | CMP #$AA 322 | BEQ SVR1 323 | STA vicbase,Y 324 | SVR1 INY ;c5c9 325 | CPY r1L 326 | BNE SVR0 327 | RTS 328 | 329 | _InitRam LDY #0 ;c567 330 | LDA (r0),Y 331 | STA r1L 332 | INY 333 | ORA (r0),Y 334 | BEQ IRam3 335 | LDA (r0),Y 336 | STA r1H 337 | INY 338 | LDA (r0),Y 339 | STA r2L 340 | INY 341 | IRam0 TYA ;c57c 342 | TAX 343 | LDA (r0),Y 344 | LDY #0 345 | STA (r1),Y 346 | INC r1L 347 | BNE IRam1 348 | INC r1H 349 | IRam1 TXA ;c58a 350 | TAY 351 | INY 352 | DEC r2L 353 | BNE IRam0 354 | TYA 355 | +add r0L 356 | STA r0L 357 | BCC IRam2 358 | INC r0H 359 | IRam2 +bra _InitRam ;c59b 360 | IRam3 RTS ;c59e 361 | 362 | InitGEOS JSR _DoFirstInitIO ;c40a ;UNK_1 363 | InitGEOEnv LDA #>InitRamTab ;c40d ;UNK_1_1 364 | STA r0H 365 | LDA #bootName 437 | JSR $FFBD 438 | LDA #$50 439 | LDX #8 440 | LDY #1 441 | JSR $FFBA 442 | LDA #0 443 | JSR $FFD5 444 | BCC _RunREU 445 | JMP ($0302) 446 | BootREU LDY #8 ;c041 447 | BootREU1 LDA BootREUTab,Y ;c043 448 | STA EXP_BASE+1,Y 449 | DEY 450 | BPL BootREU1 451 | BootREU2 DEY ;c04c 452 | BNE BootREU2 453 | _RunREU JMP RunREU ;c04f 454 | BootREUTab 455 | !word $0091 456 | !word $0060 457 | !word $007e 458 | !word $0500 459 | !word $0000 460 | 461 | !if (removeToBASIC) { 462 | _ToBASIC sei 463 | jsr PurgeTurbo 464 | +LoadB CPU_DATA, KRNL_BAS_IO_IN 465 | +LoadB $DE00, 0 466 | jmp $fce2 467 | } else { 468 | _ToBASIC LDY #39 ;c05c 469 | TB1 LDA (r0),Y ;c05e 470 | CMP #"A" 471 | BCC TB2 472 | CMP #"Z"+1 473 | BCS TB2 474 | SBC #$3F 475 | TB2 STA LoKernalBuf,Y ;c06a 476 | DEY 477 | BPL TB1 478 | LDA r5H 479 | BEQ TB4 480 | INY 481 | TYA 482 | TB3 STA BASICspace,Y ;c076 483 | INY 484 | BNE TB3 485 | +SubVW $0002,r7 486 | LDA (r7),Y 487 | PHA 488 | INY 489 | LDA (r7),Y 490 | PHA 491 | +PushW r7 492 | LDA (r5),Y 493 | STA r1L 494 | INY 495 | LDA (r5),Y 496 | STA r1H 497 | +LoadW r2, $ffff 498 | JSR _ReadFile 499 | +PopW r0 500 | LDY #1 501 | PLA 502 | STA (r0),Y 503 | DEY 504 | PLA 505 | STA (r0),Y 506 | TB4 JSR GetDirHead ;c0b7 507 | JSR PurgeTurbo 508 | LDA sysRAMFlg 509 | STA sysFlgCopy 510 | AND #%00100000 511 | BEQ TB6 512 | LDY #6 513 | TB5 LDA ToBASICTab,Y ;c0c9 514 | STA r0,Y 515 | DEY 516 | BPL TB5 517 | JSR StashRAM 518 | TB6 JMP LoKernal1 ;c0d5 519 | ToBASICTab 520 | !word dirEntryBuf 521 | !word REUOsVarBackup 522 | !word OS_VARS_LGH 523 | !byte $00 524 | } 525 | 526 | !if (useRamExp) { 527 | _EnterDeskTop ;c326 528 | SEI 529 | CLD 530 | LDX #TRUE 531 | STX firstBoot 532 | TXS 533 | JSR ClrScr 534 | JSR InitGEOS 535 | +MoveW DeskTopStart, r0 536 | +MoveB DeskTopLgh, r2H 537 | +LoadW r1, 1 538 | jsr RamExpRead 539 | +LoadB r0L, NULL 540 | +MoveW DeskTopExec, r7 541 | } else { 542 | _EnterDT_DB ;c3c0 543 | !byte DEF_DB_POS | 1 544 | !byte DBTXTSTR, TXT_LN_X, TXT_LN_1_Y+6 545 | !word _EnterDT_Str0 546 | !byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y+6 547 | !word _EnterDT_Str1 548 | !byte OK, DBI_X_2, DBI_Y_2 549 | !byte NULL 550 | 551 | _EnterDT_Str0 ;c3d8 552 | !text BOLDON, "Please insert a disk", NULL 553 | _EnterDT_Str1 ;c3ee 554 | !text "with deskTop V1.5 or higher", NULL 555 | 556 | _EnterDeskTop ;c326 557 | SEI 558 | CLD 559 | LDX #TRUE 560 | STX firstBoot 561 | TXS 562 | JSR ClrScr 563 | JSR InitGEOS 564 | +MoveB curDrive, TempCurDrive 565 | EOR #1 566 | TAY 567 | LDA _driveType,Y 568 | PHP 569 | LDA TempCurDrive 570 | PLP 571 | BPL EDT1 572 | TYA 573 | EDT1 JSR EDT3 ;c348 574 | LDY NUMDRV 575 | CPY #2 576 | BCC EDT2 577 | LDA curDrive 578 | EOR #1 579 | JSR EDT3 580 | EDT2 +LoadW r0, _EnterDT_DB ;c35a 581 | JSR DoDlgBox 582 | LDA TempCurDrive 583 | BNE EDT1 584 | EDT3 JSR SetDevice ;c36a 585 | JSR OpenDisk 586 | +beqx EDT5 587 | EDT4 RTS ;c373 588 | EDT5 STA r0L ;c374 589 | +LoadW r6, DeskTopName 590 | JSR GetFile 591 | +bnex EDT4 592 | LDA fileHeader+O_GHFNAME+13 593 | CMP #"1" 594 | BCC EDT4 595 | BNE EDT6 596 | LDA fileHeader+O_GHFNAME+15 597 | CMP #"5" 598 | BCC EDT4 599 | EDT6 LDA TempCurDrive ;c394 600 | JSR SetDevice 601 | +LoadB r0L, NULL 602 | +MoveW fileHeader+O_GHST_VEC, r7 603 | } 604 | _StartAppl SEI ;c3a8 605 | CLD 606 | LDX #$FF 607 | TXS 608 | JSR UNK_5 609 | JSR InitGEOS 610 | JSR _UseSystemFont 611 | JSR UNK_4 612 | LDX r7H 613 | LDA r7L 614 | JMP _MNLP 615 | 616 | UNK_4 +MoveB A885D, r10L ;c5cf 617 | +MoveB A885E, r0L 618 | AND #1 619 | BEQ U_40 620 | +MoveW A885F, r7 621 | U_40 +LoadW r2, dataDiskName ;c5e7 622 | +LoadW r3, dataFileName 623 | U_41 RTS 624 | 625 | 626 | UNK_5 +MoveW r7, A885F 627 | +MoveB r10L, A885D 628 | +MoveB r0L, A885E 629 | AND #%11000000 630 | BEQ U_41 631 | LDY #>dataDiskName 632 | LDA #dataFileName 636 | LDA #