1000 ; 1005 ;REM SAVE"GEOSDEMO/PAL",8 1010 ; 1015 ;REM F.G.KOSTELLA 12/10/87 1020 ; 1025 * = $0304 1030 ; 1035 ;ZPAGE PSEUDOREGISTERS 1040 ; 1045 R0 = $02 1050 R0L = $02 1055 R0H = $03 1060 R1 = $04 1065 R1L = $04 1070 R1H = $05 1075 R11 = $18 1080 R11L = $18 1085 R11H = $19 1090 ; 1095 ;GEOS ROUTINES 1100 ; 1105 DOMENU = $C151 1110 REDOMENU = $C193 1115 DOPREVIOUSME = $C190 ;DOPREVIOUSMENU 1120 GOTOFIRSTMEN = $C1BD ;GOTOFIRSTMENU 1125 DRAWLINE = $C130 1130 SETPATTERN = $C139 1135 DRAWPOINT = $C133 1140 RECTANGLE = $C124 1145 I.RECTANGLE = $C19F 1150 FRAMERECTANG = $C127 ;FRAMERECTANGLE 1155 I.FRAMERECTA = $C1A2 ;I.FRAMERECTANGLE 1160 BITMAPUP = $C124 1165 I.BITMAPUP = $C1AB 1170 DOICONS = $C15A 1175 DODLGBOX = $C256 1180 RSTRFRMDIALO = $C2BF ;RSTRFRMDIALOG 1185 PUTSTRING = $C148 1190 I.PUTSTRING = $C1AE 1195 PUTDECIMAL = $C184 1200 ENTERDESKTOP = $C22C 1205 ; 1210 STRINGFAULTV = $84AB ;STRINGFAULTVECTOR 1215 SYSDBDATA = $851D 1220 ; 1225 ;------------------------------ 1230 ;HEADER BLOCK STARTS AT $0304 1235 ;RAM BASED ASSEMBLERS MAY NEED 1240 ;TO CHANGE START ADDRESS. 1245 ;------------------------------ 1250 ;-ASSEMBLE THE HEADER BLOCK HERE- 1255 ; -NOTE- 1260 ;1ST 4 BYTES COMMENTED OUT HERE 1265 ;THEY WILL BE PLACED IN THE 1270 ;GEOS FILE HEADER BY "MAKETOGEOS" 1275 ;.BYTE 0,255 ; 1 SECTOR 1280 ;.BYTE 3,21 ; 3X21 ICON 1285 ;-------------------------------- 1290 ;DEFINE ICON TO APPEAR ON DESK TOP 1295 .BYTE $BF ;$80 (STRAIGHT BITMAP) + 63 DATA BYTES 1300 .BYTE %11111111,%11111111,%11111000 1305 .BYTE %10000000,%00000000,%00001000 1310 .BYTE %10000000,%00000000,%00001000 1315 .BYTE %10011101,%11011101,%11001111 1320 .BYTE %10001001,%00010000,%10001111 1325 .BYTE %10001001,%11001000,%10001111 1330 .BYTE %10001001,%00000100,%10001111 1335 .BYTE %10001001,%11011100,%10001111 1340 .BYTE %10000000,%00000000,%00001111 1345 .BYTE %10000000,%00000000,%00001111 1350 .BYTE %10011101,%11010001,%11001111 1355 .BYTE %10010000,%10010001,%00001111 1360 .BYTE %10011100,%10010001,%11001111 1365 .BYTE %10010000,%10010001,%00001111 1370 .BYTE %10010001,%11011101,%11001111 1375 .BYTE %10000000,%00000000,%00001111 1380 .BYTE %10000000,%00000000,%00001111 1385 .BYTE %11111111,%11111111,%11111111 1390 .BYTE %00011111,%11111111,%11111111 1395 .BYTE %00011111,%11111111,%11111111 1400 .BYTE %00011111,%11111111,%11111111 1405 ; 1410 .BYTE $83 ;C64 FILETYPE USR 1415 .BYTE 6 ;APPLICATION 1420 .BYTE 0 ;GEOS SEQ FILE 1425 ; 1430 .WORD STARTADDRESS ;LOAD START ADDR 1435 .WORD ENDOFCODE ;LOAD END ADDR 1440 .WORD STARTJUMP ;START ADDR JUMP 1445 ; 1450 .BYTE 'FILENAME V1.1' ;PERM NAME STRING 1455 .BYTE 0,0,0,0 ; 1460 .BYTE 'AUTHOR NAME ' 1465 ; 1470 ;THE REST OF THE HEADER BLOCK 1475 ;IS NOT USED IN THIS FILE 1480 ; 1485 ; ------------------------------ 1490 ;RAM BASED ASSEMBLERS CHANGE ADDR 1495 * =$0400 1500 ; ------------------------------ 1505 ; 1510 STARTADDRESS =* ;SAVE START 1515 STARTJUMP =* 1520 ; 1525 ; CLEAN SCREEN 1530 LDA #0 1535 JSR SETPATTERN 1540 JSR I.RECTANGLE 1545 .BYTE 0 1550 .BYTE 199 1555 .WORD 0 1560 .WORD 319 1565 LDA #$FF 1570 JSR FRAMERECTANG 1575 ; 1580 ;1 ICON REQUIRED AT ALL TIMES, SO 1585 ; 1590 LDX #DUMBICONDATA ;WE NEED ONE 1600 STX R0L 1605 STY R0H 1610 JSR DOICONS 1615 ; MENUS 1620 LDX #OURMENU 1630 STX R0L 1635 STY R0H 1640 LDA #1 1645 JSR DOMENU 1650 ; THAT'S ALL!, RTS TO MAIN LOOP 1655 RTS 1660 ;============================== 1665 DUMBICONDATA =* 1670 .BYTE 1 ;# OF ICONS 1675 .WORD 319 ;LEAVE MOUSE X POS, 1680 .BYTE 199 ;Y POS 1685 ; 1690 .WORD 0 ;ICON BITMAP ADDR 1695 .BYTE 36,1 ;H POS.BYTE(/8),V POS. PIXEL 1700 .BYTE 1,1 ;W+H 1705 .WORD 0 ;DISPATCH RTN 1710 ;=============================== 1715 ;... MENU STRUCTURE... 1720 OURMENU =* 1725 .BYTE 0 ;MAIN TOP 1730 .BYTE 13 ;MAIN BOTTOM 1735 .WORD 0 ;MAIN LEFT 1740 .WORD 80 ;MAIN RIGHT 1745 .BYTE 2 ;HORZ ($00) OR'ED W/ # MENU ITEMS 1750 ; 1755 .WORD FILEMENUTEXT 1760 .BYTE $80 ;SUB MENU CONSTANT 1765 .WORD FILEMENU ;RTN 1770 ; 1775 .WORD OPERATETEXT 1780 .BYTE $80 1785 .WORD OPERATEMENU 1790 ; 1795 ;TEXT FOR MAIN SELECTIONS 1800 FILEMENUTEXT .BYTE 'FILE' 1805 .BYTE 0 1810 OPERATETEXT .BYTE 'OPERATIONS' 1815 .BYTE 0 1820 ; 1825 ;..SUBMENUS... 1830 ; 1835 FILEMENU =* 1840 .BYTE 13 1845 .BYTE 27 1850 .WORD 0 1855 .WORD 33 1860 .BYTE $81 ;VERT ORED W/ # ITEMS 1865 ; 1870 .WORD FILEQUITTEXT 1875 .BYTE 0 ;MENU ACTION 1880 .WORD DOEXIT ;RTN 1885 ; 1890 FILEQUITTEXT .BYTE 'QUIT' 1895 .BYTE 0 1900 ; 1905 DOEXIT =* 1910 JMP ENTERDESKTOP 1915 ; 1920 OPERATEMENU =* 1925 .BYTE 13,55 ;TOP,BOT 1930 .WORD 23,80 ;LEFT,RIGHT 1935 .BYTE $83 ;VERTICAL OR'D W/ # 1940 ; 1945 .WORD OP0TEXT 1950 .BYTE 0 ;MENU ACTION 1955 .WORD OP0RTN 1960 ; 1965 .WORD OP1TEXT 1970 .BYTE 0 1975 .WORD MOVER 1980 ; 1985 .WORD OP2TEXT 1990 .BYTE 0 1995 .WORD SIZER 2000 ; 2005 OP0TEXT .BYTE 'PATTERN' 2010 .BYTE 0 2015 OP1TEXT .BYTE 'MOVER' 2020 .BYTE 0 2025 OP2TEXT .BYTE 'SIZER' 2030 .BYTE 0 2035 ;------------------------- 2040 OURPATTERN .WORD 0 2045 ; 2050 OP0RTN =* 2055 JSR GOTOFIRSTMEN 2060 ; 2065 LDA OURPATTERN 2070 AND #%00011111 2075 STA OURPATTERN 2080 JSR SETPATTERN 2085 JSR I.RECTANGLE 2090 .BYTE 13 2095 .BYTE 199 2100 .WORD 0 2105 .WORD 319 2110 LDA #$FF 2115 JSR FRAMERECTANG 2120 ; 2125 JSR I.PUTSTRING 2130 .WORD 92 2135 .BYTE 10 2140 .BYTE 'PATTERN: ' 2145 .BYTE 0 2150 ; 2155 LDX #132 2160 LDY #0 2165 STX R11L 2170 STY R11H 2175 LDY #10 2180 STY R1+1 2185 LDX OURPATTERN 2190 LDY #0 2195 STX R0 2200 STY R0+1 2205 LDA #%11000000 2210 JSR PUTDECIMAL 2215 ; 2220 INC OURPATTERN 2225 RTS 2230 ; 2235 ;--------------------------- 2240 ;VALUES USED TO ADD TO POS BYTES 2245 DBTOP .BYTE 0 2250 DBBOTTOM .BYTE 0 2255 DBLEFT .BYTE 0 2260 DBRIGHT .BYTE 0 2265 ;===== 2270 MOVER =* 2275 JSR GOTOFIRSTMEN 2280 ; 2285 DODBAGAIN =* 2290 JSR CLEARADDER 2295 LDX #OURDBTABLE 2305 STX R0L 2310 STY R0H 2315 JSR DODLGBOX 2320 LDA R0 ;RETURNED BY DB 2325 BMI DOOURRTNS 2330 ; ITS 'OK' 2335 RTS 2340 ; 2345 DOOURRTNS =* 2350 CMP #$82 2355 BCS OURRTNS1 2360 LDA #2 2365 STA DBTOP 2370 STA DBBOTTOM 2375 JSR DBSUBTRACT 2380 JMP OURRTNS4 2385 ; 2390 OURRTNS1 =* 2395 CMP #$83 2400 BCS OURRTNS2 2405 LDA #2 2410 STA DBLEFT 2415 STA DBRIGHT 2420 JSR DBSUBTRACT 2425 JMP OURRTNS4 2430 ; 2435 OURRTNS2 =* 2440 CMP #$84 2445 BCS OURRTNS3 2450 LDA #2 2455 STA DBTOP 2460 STA DBBOTTOM 2465 JSR DBADD 2470 JMP OURRTNS4 2475 ; 2480 OURRTNS3 =* 2485 LDA #2 2490 STA DBLEFT 2495 STA DBRIGHT 2500 JSR DBADD 2505 ; 2510 OURRTNS4 =* 2515 JSR DISPLAYVALS 2520 JMP DODBAGAIN 2525 ; 2530 ;----------------------------- 2535 ;USE THE SAME DB, PROCESS 2540 ;THE RESULTS DIFFERENTLY 2545 ; 2550 SIZER =* 2555 JSR GOTOFIRSTMEN 2560 ; 2565 DODBAGAINZ =* 2570 JSR CLEARADDER 2575 LDX #OURDBTABLE 2585 STX R0L 2590 STY R0H 2595 JSR DODLGBOX 2600 LDA R0 ;RETURNED BY DB 2605 BMI DOOURRTNSZ 2610 RTS 2615 ; 2620 DOOURRTNSZ =* 2625 CMP #$82 2630 BCS OURRTNS1Z 2635 LDA #2 2640 STA DBTOP 2645 JSR DBSUBTRACT 2650 JSR CLEARADDER 2655 LDA #2 2660 STA DBBOTTOM 2665 JSR DBADD 2670 JMP OURRTNS4Z 2675 ; 2680 OURRTNS1Z =* 2685 CMP #$83 2690 BCS OURRTNS2Z 2695 LDA #2 2700 STA DBLEFT 2705 JSR DBSUBTRACT 2710 JSR CLEARADDER 2715 LDA #2 2720 STA DBRIGHT 2725 JSR DBADD 2730 JMP OURRTNS4Z 2735 ; 2740 OURRTNS2Z =* 2745 CMP #$84 2750 BCS OURRTNS3Z 2755 LDA #2 2760 STA DBTOP 2765 JSR DBADD 2770 JSR CLEARADDER 2775 LDA #2 2780 STA DBBOTTOM 2785 JSR DBSUBTRACT 2790 JMP OURRTNS4Z 2795 ; 2800 OURRTNS3Z =* 2805 LDA #2 2810 STA DBLEFT 2815 JSR DBADD 2820 JSR CLEARADDER 2825 LDA #2 2830 STA DBRIGHT 2835 JSR DBSUBTRACT 2840 ; 2845 OURRTNS4Z =* 2850 JSR DISPLAYVALS 2855 JMP DODBAGAINZ 2860 ; 2865 ;----------DB SUBS-------------- 2870 ; 2875 CLEARADDER =* 2880 LDA #0 2885 STA DBTOP 2890 STA DBBOTTOM 2895 STA DBLEFT 2900 STA DBRIGHT 2905 RTS 2910 ; 2915 DBSUBTRACT =* 2920 SEC 2925 LDA OURDBTABLE+1 ;TOP OF DB 2930 SBC DBTOP 2935 STA OURDBTABLE+1 2940 SEC 2945 LDA OURDBTABLE+2 ;BOT OF DB 2950 SBC DBBOTTOM 2955 STA OURDBTABLE+2 2960 SEC 2965 LDA OURDBTABLE+3 ;LEFT OF DB 2970 SBC DBLEFT 2975 STA OURDBTABLE+3 2980 LDA OURDBTABLE+4 2985 SBC #0 2990 STA OURDBTABLE+4 2995 SEC 3000 LDA OURDBTABLE+5 ;RIGHTT OF DB 3005 SBC DBRIGHT 3010 STA OURDBTABLE+5 3015 LDA OURDBTABLE+6 3020 SBC #0 3025 STA OURDBTABLE+6 3030 RTS 3035 ; 3040 DBADD =* 3045 CLC 3050 LDA OURDBTABLE+1 ;TOP OF DB 3055 ADC DBTOP 3060 STA OURDBTABLE+1 3065 CLC 3070 LDA OURDBTABLE+2 ;BOT OF DB 3075 ADC DBBOTTOM 3080 STA OURDBTABLE+2 3085 CLC 3090 LDA OURDBTABLE+3 ;LEFT OF DB 3095 ADC DBLEFT 3100 STA OURDBTABLE+3 3105 LDA OURDBTABLE+4 3110 ADC #0 3115 STA OURDBTABLE+4 3120 CLC 3125 LDA OURDBTABLE+5 ;RIGHTT OF DB 3130 ADC DBRIGHT 3135 STA OURDBTABLE+5 3140 LDA OURDBTABLE+6 3145 ADC #0 3150 STA OURDBTABLE+6 3155 RTS 3160 ; 3165 ; 3170 DISPLAYVALS =* 3175 ; 3180 LDA #0 3185 JSR SETPATTERN 3190 JSR I.RECTANGLE 3195 .BYTE 1 3200 .BYTE 11 3205 .WORD 239 3210 .WORD 318 3215 ; 3220 LDX #210 3225 LDY #0 3230 STX R11L 3235 STY R11H 3240 LDY #10 3245 STY R1H 3250 LDX OURDBTABLE+1 3255 LDY #0 3260 STX R0L 3265 STY R0H 3270 LDA #%11000000 3275 JSR PUTDECIMAL 3280 ; 3285 LDX #235 3290 LDY #0 3295 STX R11L 3300 STY R11H 3305 LDX OURDBTABLE+2 3310 LDY #0 3315 STX R0 3320 STY R0H 3325 LDA #%11000000 3330 JSR PUTDECIMAL 3335 ; 3340 LDX #4 3345 LDY #1 3350 STX R11L 3355 STY R11H 3360 LDX OURDBTABLE+3 3365 LDY OURDBTABLE+4 3370 STX R0 3375 STY R0H 3380 LDA #%11000000 3385 JSR PUTDECIMAL 3390 ; 3395 LDX #29 3400 LDY #1 3405 STX R11L 3410 STY R11H 3415 LDX OURDBTABLE+5 3420 LDY OURDBTABLE+6 3425 STX R0 3430 STY R0H 3435 LDA #%11000000 3440 JSR PUTDECIMAL 3445 RTS 3450 ;------------------------------ 3455 OURDBTABLE =* 3460 ; 3465 .BYTE $01 ;POS/SHADOW PATRN 3470 ; 3475 .BYTE 50 ;TOP 3480 .BYTE 86 ;BOTT 3485 .WORD 48 ;LEFT 3490 .WORD 120 ;RIGHT 3495 ; 3500 .BYTE 1 ;OK 3505 .BYTE 1 ;X BYT 3510 .BYTE 16 ;Y PIXEL 3515 ; 3520 .BYTE $12 ;USER ICON 3525 .BYTE 1 ;X OFFSET 3530 .BYTE 4 ;Y OFFSET 3535 .WORD DBICON1 ;ADDR OF ICON TABLE 3540 ; 3545 .BYTE $12 3550 .BYTE 3,4 3555 .WORD DBICON2 3560 ; 3565 .BYTE $12 3570 .BYTE 5,4 3575 .WORD DBICON3 3580 ; 3585 .BYTE $12 3590 .BYTE 7,4 3595 .WORD DBICON4 3600 ; 3605 .BYTE 0 ;END 3610 ;-------------------------- 3615 ;DB USER ICON TABLES, GRAPHICS 3620 ;& SERVICE ROUTINES FOR MOVER 3625 ; 3630 DBICON1 =* 3635 .WORD DBI1BITMAP ;ADDR OF PICTURE DATA 3640 .BYTE 0,0 ;X,Y-ALREADY SET! 3645 .BYTE 1 ;BYTES WIDE 3650 .BYTE 8 ;PIXELS HI 3655 .WORD DBI1RTN ;ADDR OF SVC RTN 3660 ; 3665 DBI1BITMAP =* 3670 ; 3675 .BYTE $88 ;FORMAT 2, USE THE NEXT 8 BYTES 3680 .BYTE %11111111 3685 .BYTE %11100111 3690 .BYTE %11000011 3695 .BYTE %10000001 3700 .BYTE %11100111 3705 .BYTE %11100111 3710 .BYTE %11100111 3715 .BYTE %11111111 3720 ; 3725 DBI1RTN =* 3730 ; 3735 LDA #$81 3740 STA SYSDBDATA 3745 ; AND GET OUT 3750 JMP RSTRFRMDIALO 3755 ; ------------------------- 3760 DBICON2 =* 3765 .WORD DBI2BITMAP 3770 .BYTE 0,0,1,8 3775 .WORD DBI2RTN 3780 ; 3785 DBI2BITMAP =* 3790 .BYTE $88 3795 .BYTE %11111111 3800 .BYTE %11101111 3805 .BYTE %11001111 3810 .BYTE %10000001 3815 .BYTE %10000001 3820 .BYTE %11001111 3825 .BYTE %11101111 3830 .BYTE %11111111 3835 ; 3840 DBI2RTN =* 3845 LDA #$82 3850 STA SYSDBDATA 3855 JMP RSTRFRMDIALO 3860 ; 3865 ; 3870 DBICON3 =* 3875 .WORD DBI3BITMAP 3880 .BYTE 0,0,1,8 3885 .WORD DBI3RTN 3890 ; 3895 DBI3BITMAP =* 3900 .BYTE $88 3905 .BYTE %11111111 3910 .BYTE %11100111 3915 .BYTE %11100111 3920 .BYTE %11100111 3925 .BYTE %10000001 3930 .BYTE %11000011 3935 .BYTE %11100111 3940 .BYTE %11111111 3945 ; 3950 DBI3RTN =* 3955 ; 3960 LDA #$83 3965 STA SYSDBDATA 3970 JMP RSTRFRMDIALO 3975 ; ------------------------- 3980 ; 3985 ; 3990 DBICON4 =* 3995 .WORD DBI4BITMAP 4000 .BYTE 0,0,1,8 4005 .WORD DBI4RTN 4010 ; 4015 DBI4BITMAP =* 4020 ; 4025 .BYTE $88 4030 .BYTE %11111111 4035 .BYTE %11110111 4040 .BYTE %11110011 4045 .BYTE %10000001 4050 .BYTE %10000001 4055 .BYTE %11110011 4060 .BYTE %11110111 4065 .BYTE %11111111 4070 ; 4075 DBI4RTN =* 4080 LDA #$84 4085 STA SYSDBDATA 4090 JMP RSTRFRMDIALO 4095 ; 4100 ENDOFCODE =* 4105 .END 4110 ; 4115 THATS ALL FOLKS!!