1; GEOS KERNAL by Berkeley Softworks 2; reverse engineered by Maciej Witkowiak, Michael Steil 3; 4; Menus: RecoverMenu, RecoverAllMenus syscalls and misc 5 6.include "const.inc" 7.include "geossym.inc" 8.include "geosmac.inc" 9.include "config.inc" 10.include "gkernal.inc" 11.include "c64.inc" 12 13.import Menu_0 14.import DoMenu0 15.import _Sleep 16.import menuOptionTab 17.import _MouseOff 18.import menuRight 19.import menuLeft 20.import menuBottom 21.import menuTop 22.import GetMenuDesc 23.import menuLimitTabL 24.import menuLimitTabH 25.import menuOptNumber 26.import _InvertRectangle 27.import _HorizontalLine 28.import _VerticalLine 29 30.import Ddec 31.import Rectangle 32.import SetPattern 33 34.global CopyMenuCoords 35.global DrawMenu 36.global MenuDoInvert 37.global MenuRestoreFont 38.global MenuStoreFont 39.global Menu_3 40.global Menu_4 41.global Menu_5 42.global RcvrMnu0 43.global _RecoverMenu 44.global _RecoverAllMenus 45 46.segment "menu3" 47 48Menu_3: 49 ldy r10H 50 ldx r1H 51 bbsf 7, menuOptNumber, @1 52 lda r11H 53 sta menuLimitTabH,y 54 ldx r11L 55@1: txa 56 sta menuLimitTabL,y 57 rts 58 59Menu_4: 60 bcc @1 61 bbrf 7, menuOptNumber, @2 62.ifdef wheels_size_and_speed 63 bmi @3 64.else 65 bra @3 66.endif 67@1: bbrf 7, menuOptNumber, @3 68@2: AddVB 2, r1H 69 rts 70@3: AddVW_ 4, r11 71 rts 72 73;--------------------------------------------------------------- 74_RecoverAllMenus: 75 jsr GetMenuDesc 76 jsr _RecoverMenu 77 dec menuNumber 78 bpl _RecoverAllMenus 79 lda #0 80 sta menuNumber 81 rts 82 83;--------------------------------------------------------------- 84_RecoverMenu: 85 jsr CopyMenuCoords 86RcvrMnu0: 87 lda RecoverVector 88 ora RecoverVector+1 89 bne @1 90.ifndef wheels_size_and_speed 91 lda #0 92.endif 93 jsr SetPattern 94 jmp Rectangle 95@1: jmp (RecoverVector) 96 97.if ((menuVSeparator | menuHSeparator)<>0) 98DrawMenu: 99.ifdef wheels 100 lda menuOptNumber 101 bpl LEFAE 102 and #$1F 103 subv 1 104 beq LEFAE 105 sta r2L 106 MoveW menuLeft, r3 107 MoveW menuRight, r4 108LEF9E: ldx r2L 109 lda menuLimitTabL,x 110 sta r11L 111 lda #$FF 112 jsr _HorizontalLine 113 dec r2L 114 bne LEF9E 115LEFAE: rts 116.else 117 lda menuOptNumber 118 and #%00011111 119 subv 1 120 beq @5 121 sta r2L 122 bbsf 7, menuOptNumber, @2 123.if (menuVSeparator<>0) 124 lda menuTop 125 addv 1 126 sta r3L 127 lda menuBottom 128 subv 1 129 sta r3H 130@1: ldx r2L 131 lda menuLimitTabL,x 132 sta r4L 133 lda menuLimitTabH,x 134 sta r4H 135 lda #menuVSeparator 136 jsr _VerticalLine 137 dec r2L 138 bne @1 139.endif 140.if (menuHSeparator<>0) 141 rts 142.endif 143@2: 144.if (menuHSeparator<>0) 145 MoveW menuLeft, r3 146 inc r3L 147 bne @3 148 inc r3H 149@3: MoveW menuRight, r4 150 ldx #r4 151 jsr Ddec 152@4: ldx r2L 153 lda menuLimitTabL,x 154 sta r11L 155 lda #menuHSeparator 156 jsr _HorizontalLine 157 dec r2L 158 bne @4 159.endif 160@5: rts 161.endif 162.endif 163 164CopyMenuCoords: 165 ldx #6 166@1: lda menuTop-1,x 167 sta r2-1,x 168 dex 169 bne @1 170 rts 171 172Menu_5: 173 jsr _MouseOff 174 jsr Menu_7 175 jsr MenuDoInvert 176 lda r9L 177 ldx menuNumber 178 sta menuOptionTab,x 179 jsr Menu_8 180 bbsf 7, r1L, Menu_52 181.ifdef wheels 182 bvc LEFE4 183 jsr LEFE4 184 lda r0L 185 ora r0H 186 bne Menu_52 187 rts 188Menu_52: 189 inc menuNumber 190 jmp DoMenu0 191LEFE4: ldx menuNumber 192 lda menuOptionTab,x 193 jmp (r0) 194.else 195.ifndef newMenu_5 196 bvs Menu_51 197 MoveB selectionFlash, r0L 198 LoadB r0H, NULL 199 jsr _Sleep 200 jsr Menu_7 201 jsr MenuDoInvert 202 MoveB selectionFlash, r0L 203 LoadB r0H, NULL 204 jsr _Sleep 205 jsr Menu_7 206.else 207Menu_5Help: 208 MoveB selectionFlash, r0L 209 LoadB r0H, NULL 210 jsr _Sleep 211 jmp Menu_7 212 213Menu_5: 214 jsr _MouseOff 215 jsr Menu_7 216 jsr MenuDoInvert 217 lda r9L 218 ldx menuNumber 219 sta menuOptionTab,x 220 jsr Menu_8 221 bbsf 7, r1L, Menu_52 222 bvs Menu_51 223 jsr Menu_5Help 224 jsr MenuDoInvert 225 jsr Menu_5Help 226.endif 227 jsr MenuDoInvert 228 jsr Menu_7 229 ldx menuNumber 230 lda menuOptionTab,x 231 pha 232 jsr Menu_8 233 pla 234 jmp (r0) 235 236Menu_51: 237 jsr Menu_6 238 lda r0L 239 ora r0H 240 bne Menu_52 241 rts 242Menu_52: 243 inc menuNumber 244 jmp DoMenu0 245 246Menu_6: 247 ldx menuNumber 248 lda menuOptionTab,x 249 pha 250 jsr Menu_8 251 pla 252 jmp (r0) 253.endif 254 255.ifdef wheels ; xxx moved 256MenuDoInvert: 257 PushB dispBufferOn 258 LoadB dispBufferOn, ST_WR_FORE 259 jsr _InvertRectangle 260 PopB dispBufferOn 261 rts 262 263 .byte 0, 0, 0, 0, 0 ; ??? 264.endif 265 266Menu_7: 267 lda menuOptNumber 268 and #%00011111 269 tay 270 lda menuOptNumber 271 bmi @4 272@1: dey 273 lda mouseXPos+1 274 cmp menuLimitTabH,y 275.ifdef bsw128 276 beq @X 277 bcs @Y 278.else 279 bne @2 280.endif 281@X: lda mouseXPos 282 cmp menuLimitTabL,y 283@2: bcc @1 284@Y: iny 285 lda menuLimitTabL,y 286 sta r4L 287 lda menuLimitTabH,y 288 sta r4H 289 dey 290 lda menuLimitTabL,y 291 sta r3L 292 lda menuLimitTabH,y 293 sta r3H 294 sty r9L 295.ifndef wheels 296 cpy #0 297 bne @3 298 inc r3L 299 bne @3 300 inc r3H 301.endif 302@3: ldx menuTop 303 inx 304 stx r2L 305 ldx menuBottom 306 dex 307 stx r2H 308 rts 309@4: lda mouseYPos 310@5: dey 311 cmp menuLimitTabL,y 312 bcc @5 313 iny 314 lda menuLimitTabL,y 315 sta r2H 316 dey 317 lda menuLimitTabL,y 318 sta r2L 319 sty r9L 320 cpy #0 321 bne @6 322 inc r2L 323@6: MoveW menuLeft, r3 324.ifdef wheels_size ; code reuse 325.import IncR3 326 jsr IncR3 327.else 328 inc r3L 329 bne @7 330 inc r3H 331@7: 332.endif 333 MoveW menuRight, r4 334 ldx #r4 335.ifdef wheels_size_and_speed 336 jmp Ddec 337.else 338 jsr Ddec 339 rts 340.endif 341 342Menu_8: 343 jsr Menu_0 344 iny 345 iny 346 lda (r0),y 347 sta r1L 348 iny 349 lda (r0),y 350 tax 351 iny 352 lda (r0),y 353 sta r0H 354 stx r0L 355 rts 356 357.ifndef wheels ; xxx moved 358MenuDoInvert: 359 PushB dispBufferOn 360 LoadB dispBufferOn, ST_WR_FORE 361 jsr _InvertRectangle 362 PopB dispBufferOn 363 rts 364.endif 365 366MenuStoreFont: 367 ldx #9 368@1: lda g_baselineOffset-1,x 369 sta saveFontTab-1,x 370 dex 371 bne @1 372 rts 373 374MenuRestoreFont: 375 ldx #9 376@1: lda saveFontTab-1,x 377 sta g_baselineOffset-1,x 378 dex 379 bne @1 380 rts 381