Changeset 9
- Timestamp:
- 07/25/09 04:38:35 (3 years ago)
- Location:
- trunk
- Files:
-
- 6 modified
-
includes/os2.inc (modified) (7 diffs)
-
page00/boot.asm (modified) (9 diffs)
-
page00/jumptable.asm (modified) (1 diff)
-
page00/util.asm (modified) (2 diffs)
-
page01/01base.asm (modified) (1 diff)
-
page02/02base.asm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/includes/os2.inc
r8 r9 38 38 ; System-defined RAM Variable Address Equates 39 39 ;====================================================================== 40 ramStart EQU 8000h 41 appData EQU 8000h 42 ramCode EQU 8100h 43 ; 44 ramCodeEnd EQU 822Fh 45 ; 46 apdSubTimer EQU 8448h 47 apdTimer EQU 8449h 48 curTime EQU 844Ah 49 curRow EQU 844Bh 50 curCol EQU 844Ch 51 ; 52 curUnder EQU 844Eh 53 ; 54 flags EQU 89F0h ;IY is always set to this 55 ; 56 statVars EQU 8A3Ah 57 ; 58 anovaf_vars EQU 8C17h 59 ; 60 editTop EQU 96F4h 61 editCursor EQU 96F6h 62 editTail EQU 96F8h 63 editBtm EQU 96FAh 64 ; 65 USBActivityHookBlock EQU 9BD4h 66 ; 67 offPageCallPage EQU 9C83h 68 offPageCallAddress EQU 9C84h 69 ; 70 userMem EQU 9D95h 71 symTable EQU 0FE66h 40 ramStart EQU 8000h 41 appData EQU 8000h 42 ramCode EQU 8100h 43 ; 44 ramCodeEnd EQU 822Fh 45 ; 46 apdSubTimer EQU 8448h 47 apdTimer EQU 8449h 48 curTime EQU 844Ah 49 curRow EQU 844Bh 50 curCol EQU 844Ch 51 ; 52 curUnder EQU 844Eh 53 ; 54 indicCounter EQU 8476h 55 ; 56 RAMChecksum EQU 85BEh 57 ; 58 flags EQU 89F0h ;IY is always set to this 59 ; 60 statVars EQU 8A3Ah 61 ; 62 anovaf_vars EQU 8C17h 63 ; 64 editTop EQU 96F4h 65 editCursor EQU 96F6h 66 editTail EQU 96F8h 67 editBtm EQU 96FAh 68 ; 69 appBackUpScreen EQU 9872h 70 ; 71 LinkActivityHookBlock EQU 9B78h 72 ; 73 USBActivityHookBlock EQU 9BD4h 74 ; 75 offPageCallPage EQU 9C83h 76 offPageCallAddress EQU 9C84h 77 ; 78 userMem EQU 9D95h 79 symTable EQU 0FE66h 72 80 73 81 ;====================================================================== … … 92 100 apdAble EQU 2 ;1=APD enabled 93 101 apdRunning EQU 3 ;1=APD clock running 102 apdWarmStart EQU 4 ;1=APD timer expired, soft power on is pending 94 103 95 104 onFlags EQU 09h 96 105 onRunning EQU 3 ;1=calculator is running 97 106 onInterrupt EQU 4 ;1=ON key pressed during interrupt 107 108 curFlags EQU 0Ch 109 curAble EQU 2 ;1=cursor flash is enabled 110 curOn EQU 3 ;1=cursor is showing 111 curLock EQU 4 ;1=cursor is locked off 112 113 batteryCheckFlags EQU 0Fh 114 turnOffIfLowBatteriesFound EQU 7 ;1=if low batteries detected, shut the calculator off 115 116 indicFlags EQU 12h 117 indicRun EQU 0 ;1=run indicator on 118 indicOnly EQU 2 ;1=interrupt handler only checks run indicator 119 shiftFlags EQU 12h 120 shift2nd EQU 3 ;1=2nd has been pressed 121 shiftAlpha EQU 4 ;1=[ALPHA] has been pressed 122 shiftLwrAlph EQU 5 ;1=lower case, 0=upper case 123 shiftALock EQU 6 ;1=[2nd][ALPHA] has been pressed 124 shiftKeepAlph EQU 7 ;1=cannot cancel alpha lock 98 125 99 126 interruptFlags EQU 16h … … 105 132 hw2TimerSkipped EQU 2 ;1=this firing of HW 2 timer skipped (state of skipHW2Timer,(iy+interruptFlags) 106 133 134 getKeyFlags EQU 28h 135 kOffPressed EQU 3 ;1=[2nd][ON] was pressed (I think) 136 returnOffKey EQU 7 ;1=return kOff key code instead of turning off 137 107 138 hookFlags4 EQU 3Ah 108 139 USBActivityHookEnabled EQU 0 140 141 linkAssistStatusFlags EQU 3Dh 142 linkAssistError EQU 7 143 144 linkAssistFlags EQU 3Eh 145 linkAssistEnabled EQU 0 ;1=link assist enabled (SE/84+ only) 109 146 110 147 ;---------------------------------------------------------------------- 111 148 ; Available for Assembly Programming 112 149 ;---------------------------------------------------------------------- 113 asm_Flag1 EQU 21h 114 asm_Flag2 EQU 22h 115 asm_Flag3 EQU 23h 150 asm_Flag1 EQU 21h 151 asm_Flag2 EQU 22h 152 asm_Flag3 EQU 23h 153 154 scriptFlag EQU 33h 155 ignoreBPLink EQU 3 ;1=link activity hook override, will not be called 156 LinkActivityHookEnabled EQU 4 ;1=link activity hook enabled 157 echoKeyRemotely EQU 5 ;1=echo keypresses back through linkport as remote control requests 158 intBattCheckComplete EQU 7 ;1=second hardware timer code has set battery state 116 159 117 160 ;====================================================================== … … 2861 2904 usbStatusPort EQU 55h 2862 2905 usbEventPort EQU 56h 2906 laEnPort EQU 08h 2907 laStatusPort EQU 09h 2908 laReceivePort EQU 0Ah 2909 laSendPort EQU 0Dh 2863 2910 2864 2911 ;====================================================================== … … 2871 2918 statusIs84PHardware EQU 5 2872 2919 statusIsSE84P EQU 7 2920 STATUS_NON_83P_MASK EQU 80h 2873 2921 2874 2922 ;====================================================================== … … 2887 2935 INT_TRIGGER_HW2 EQU 2 2888 2936 INT_STATUS_ON EQU 3 2937 INT_STATUS_ON_MASK EQU 8 2889 2938 INT_TRIGGER_LINK EQU 4 2890 2939 INT_TRIGGER_TIMER1 EQU 5 … … 2903 2952 2904 2953 ;====================================================================== 2905 ; LCD Driver equates 2906 ;====================================================================== 2907 LCDinstPort equ 10h 2908 LCDdataPort equ 11h 2909 ; 2954 ; LCD Driver Equates 2955 ;====================================================================== 2956 LCDinstPort EQU 10h 2957 lcd8BitMode EQU 01h 2958 lcdTurnOff EQU 02h 2959 lcdTurnOn EQU 03h 2960 lcdXAutoIncrementMode EQU 05h 2961 LCDdataPort EQU 11h 2962 2963 ;====================================================================== 2964 ; Other Port Equates 2965 ;====================================================================== 2966 speedPort EQU 20h 2967 2910 2968 ;====================================================================== 2911 2969 ; Graph style definitions 2912 2970 ;====================================================================== 2913 ;2914 2971 GSline equ 0 ;Func, Param, and Polar modes default 2915 2972 GSthick equ 1 -
trunk/page00/boot.asm
r8 r9 4 4 include "includes\os2.inc" 5 5 6 PUBLIC JErrorNo,GetCSC,HandleLinkKeyActivity7 EXTERN PutS,PutC,ifastcopy,CallUSBActivityHook6 EXTERN PutS,PutC,ifastcopy,CallUSBActivityHook,CheckLowBatteriesTurnOff,SaveOScreen 7 EXTERN RunLinkActivityHook,HandleLinkKeyActivity 8 8 EXTERN _APP_PUSH_ERRORH,_APP_POP_ERRORH,FindSym,PushRealO1,Mov9ToOP1,FPAdd,OP1ToOP2,LCDDelay 9 9 EXTERN Placeholder005Fh,Placeholder0006h,Placeholder004Eh,Placeholder0003h,Placeholder0035h 10 EXTERN outputPage,NZIf83Plus 11 EXTERN DispHexA,DispHexHL,IPutC 12 EXTERN curBlink,resetAPDTimer 10 EXTERN outputPage,NZIf83Plus,_ZERO_PORT_3,_OUT_PORT_3,AnimateRunIndicator,PowerOff 11 EXTERN DispHexA,DispHexHL,IPutC,ReadKeyboardKey 12 EXTERN curBlink,resetAPDTimer,UpdateAPD,BCALL,BJUMP 13 13 EXTERN _UnlockFlash,_LockFlash 14 14 EXTERN HandleDefaultUSBInterrupt,ReadUSBInterruptData,HandleUSBInterruptInitialize 15 EXTERN HandleUSBACablePluggedIn,HandleUSBACableUnplugged,HandleUSBBCablePluggedIn,HandleUSBBCableUnplugged 15 16 16 17 ;0000h: … … 177 178 jr interruptReturnA 178 179 AcablePluggedIn: 180 call HandleUSBACablePluggedIn 179 181 jr interruptReturnA 180 182 AcableUnplugged: 183 call HandleUSBACableUnplugged 181 184 jr interruptReturnA 182 185 BcablePluggedIn: 186 call HandleUSBBCablePluggedIn 183 187 jr interruptReturnA 184 188 BcableUnplugged: 189 call HandleUSBBCableUnplugged 185 190 jr interruptReturnA 186 191 usbInitializeDetected: … … 235 240 res hw2TimerSkipped,(iy+linkKeyFlags) 236 241 res enableHW2Timer,(iy+interruptFlags) ;disable HW2 timer, we're done 242 set intBattCheckComplete,(iy+scriptFlag) 237 243 ld a,INTERRUPT_MASK_POWER+INTERRUPT_MASK_ON 238 244 jr interruptReturnA … … 260 266 jr interruptReturnStandard 261 267 firstHardwareTimerTriggered: 268 res intBattCheckComplete,(iy+scriptFlag) 262 269 res hw2TimerSkipped,(iy+linkKeyFlags) 263 270 bit enableHW2Timer,(iy+interruptFlags) 264 271 jr z,$F 265 bit 7,(iy+0Fh) 266 ;call nz, 267 set 7,(iy+0Fh) 268 $$: ld a,(9C86h) 269 dec a 270 cp 0FFh 271 jr z,$F 272 ld (9C86h),a 273 $$: bit 0,(iy+12h) 274 ;call animateRunIndicator ;call nz,animateRunIndicator 275 bit 2,(iy+12h) 276 ; jr nz,interruptReturn9 277 call readKeyboardKey 278 bit 2,(iy+0Ch) 272 bit turnOffIfLowBatteriesFound,(iy+batteryCheckFlags) 273 call nz,CheckLowBatteriesTurnOff 274 set turnOffIfLowBatteriesFound,(iy+batteryCheckFlags) 275 $$: bit indicRun,(iy+indicFlags) 276 call nz,AnimateRunIndicator 277 bit indicOnly,(iy+indicFlags) 278 jr nz,interruptReturnOn 279 call ReadKeyboardKey 280 bit curAble,(iy+curFlags) 279 281 call nz,curBlink 280 282 call UpdateAPD 281 283 ;Deal with link activity hook 282 interruptReturn9: 283 ld a,9 284 jr interruptReturnA 285 UpdateAPD: 286 ld a,(89F8h) 287 bit apdAble,a 288 ret z 289 ld hl,(9C24h) 290 ld a,h 291 or l 292 jr z,$F 293 dec hl 294 ld (9C24h),hl 295 $$: ld a,(89F8h) 296 bit apdRunning,a 297 ret z 298 ld hl,apdSubTimer 299 dec (hl) 300 ret nz 301 inc hl 302 dec (hl) 303 ret nz 304 ld a,02h 305 out (10h),a 306 ; call SaveOScreen 307 res 3,(iy+8) 308 set 4,(iy+8) 309 jr PowerOff 310 animateRunIndicator: 311 ld hl,8476h 312 dec (hl) 313 ret nz 314 ;Animate it 315 ld hl,(curRow) 316 push hl 317 ld hl,6 318 ld (curRow),hl 319 ld a,(8000h) 320 or a 321 jr z,$F 284 bit LinkActivityHookEnabled,(iy+scriptFlag) 285 jr z,interruptReturnOn 286 bit ignoreBPLink,(iy+scriptFlag) 287 jr nz,interruptReturnOn 288 call NZIf83Plus 289 jr z,$F 290 in a,(bport) 291 and D0D1_bits 292 cp D0LD1L 293 call nz,RunLinkActivityHook 294 jr interruptReturnOn 295 $$: in a,(laStatusPort) 296 and 00011000b ;receiving/received data? 297 jr z,interruptReturnOn 298 ld a,80h 299 out (laEnPort),a 322 300 xor a 323 ld (8000h),a 324 ld a,' ' 325 call PutC 326 pop hl 327 ld (curRow),hl 328 ret 329 $$: ld a,1 330 ld (8000h),a 331 ld a,'B' 332 call PutC 333 pop hl 334 ld (curRow),hl 335 ret 336 readKeyboardKey: 337 call ReadKeypad 338 jr nc,$F 339 ld a,0FFh 340 ld (8441h),a 341 ld a,5 342 ld (8443h),a 343 ret 344 $$: ld hl,8441h 345 cp (hl) 346 ld hl,8443h 347 jr z,$F 348 ld (8441h),a 349 ld (hl),5 350 $$: or a 351 jr nz,$F 352 dec (hl) 353 ret nz 354 inc (hl) 355 $$: ld hl,8440h 356 cp (hl) 357 jr nz,rkk1 358 or a 359 ret z 360 cp 0F3h 361 jr nc,$F 362 cp 38h 363 jr z,$F 364 cp 5 365 ret nc 366 $$: ld hl,8442h 367 dec (hl) 368 ret nz 369 ld (hl),0Ah 370 jr setKbdKey 371 rkk1: call setKbdKey 372 or a 373 jr z,$F 374 set 4,(iy+0) 375 $$: ld (hl),a 376 ld a,32h 377 ld (8442h),a 378 ret 379 setKbdKey: 380 ld (843Fh),a 381 set 3,(iy+0) 382 or a 383 ret z 384 ld (8445h),a 385 ret 386 ReadKeypad: 387 sub a 388 call ReadPort1 389 xor 0FFh 390 ret z 391 ld hl,0 392 ld c,0FEh 393 ld d,1 394 rk1: ld a,c 395 bit 0,(iy+2Ch) 396 jr z,$F 397 cp 0FEh 398 jr nz,$F 399 call ReadPort1 400 cp 0F5h 401 ret z 402 cp 0F3h 403 ret z 404 cp 0FAh 405 ret z 406 cp 0FCh 407 ret z 408 jr rk3 409 $$: call ReadPort1 410 rk3: ld e,0 411 ld b,8 412 rk2: rla 413 jr c,$F 414 inc e 415 ld l,b 416 $$: djnz rk2 417 ld a,e 418 or a 419 jr z,$F 420 cp 2 421 jr nc,scfRet 422 ld a,h 423 or a 424 jr nz,scfRet 425 ld h,d 426 $$: inc d 427 rlc c 428 jr c,rk1 429 ld a,h 430 or a 431 ret z 432 dec a 433 rla 434 rla 435 rla 436 add a,l 437 ret 438 scfRet:scf 439 ret 440 ReadPort1: 441 push af 442 in a,(2) 443 and 80h 444 jr nz,rp1SE 445 rp1_1: pop af 446 out (1),a 447 rp1_2: nop 448 nop 449 nop 450 nop 451 in a,(1) 452 ld b,a 453 ld a,0FFh 454 out (1),a 455 ld a,b 456 ret 457 rp1SE: in a,(20h) 458 and 1 459 jr z,rp1_1 460 pop af 461 out (1),a 462 nop 463 nop 464 nop 465 jr rp1_2 301 out (laEnPort),a 302 set linkAssistEnabled,(iy+linkAssistFlags) 303 call RunLinkActivityHook 304 interruptReturnOn: 305 ld a,INTERRUPT_MASK_POWER+INTERRUPT_MASK_ON 306 jr interruptReturnA 466 307 linkActivityDetectedTurnOn: 467 res 3,(iy+12h)308 res shift2nd,(iy+shiftFlags) 468 309 push hl 469 310 sub a 470 311 push af 471 ld a, 8472 out ( 3),a312 ld a,INTERRUPT_MASK_POWER 313 out (interruptEnPort),a 473 314 pop af 474 out (3),a 315 out (interruptEnPort),a 316 ;Turn ourselves on if we're not already 475 317 jr handleWokenUp 476 318 onKeyPressed: 477 319 call HandleOnKeyPress 478 res 1,(iy+16h) 479 ld a,0Ah 320 ;If we managed to return from HandleOnKeyPress, we're on and just happened to press ON 321 ;So enable only the first hardware timer and march onward 322 res skipHW2Timer,(iy+interruptFlags) 323 ld a,INTERRUPT_MASK_POWER+INTERRUPT_MASK_HW1 480 324 jr interruptReturnA 481 325 HandleOnKeyPress: 482 in a,(2) 483 and 80h 484 jr z,$F 485 ld a,(20h) 326 ;We either just started holding down the key or we just released it, find out what to do 327 in a,(statusPort) 328 and STATUS_NON_83P_MASK 329 jr z,$F 330 ld a,(speedPort) 486 331 ld e,a 487 332 xor a 488 out ( 20h),a333 out (speedPort),a 489 334 $$: ld b,0 490 335 debounceOnLoop: 491 ld hl,1016h 492 $$: in a,( 4)493 and 8336 ld hl,1016h ;hard-coded debounce delay at 6MHz 337 $$: in a,(interruptStatusPort) 338 and INT_STATUS_ON_MASK 494 339 cp b 495 340 ld b,a … … 501 346 cp b 502 347 jr z,handleKeyOn 503 in a,(7) 348 ;We just released ON, either boot or return 349 in a,(memPageBPort) 504 350 ld b,a 505 in a,( 2)506 and 80h351 in a,(statusPort) 352 and STATUS_NON_83P_MASK 507 353 jr z,$F 508 354 ld a,e 509 out ( 20h),a355 out (speedPort),a 510 356 ld a,b 511 357 cp 81h … … 515 361 cp 41h 516 362 dol1: jr nz,WaitForStart 517 bit 3,(iy+9)363 bit onRunning,(iy+onFlags) 518 364 ret nz 519 365 pop hl 520 366 call _ZERO_PORT_3 521 ld a, 11h367 ld a,iNormal 522 368 jr interruptDirectReturnA 523 369 handleKeyOn: 524 in a,(2) 525 and 80h 370 ;We're pressing down ON, so either turn on or do nothing 371 in a,(statusPort) 372 and STATUS_NON_83P_MASK 526 373 jr z,handleWokenUp 527 374 ld a,e 528 out ( 20h),a375 out (speedPort),a 529 376 handleWokenUp: 530 ld a,6 531 out (4),a 532 in a,(2) 533 and 80h 534 jr z,$F 535 in a,(7) 377 ;Either link activity was detected or we pressed ON, so either boot or do pretty much nothing 378 ; depending on our on/off status (RAM page swapped in, onRunning,(iy+onFlags), etc.) 379 ld a,STATE_MODE0_DEFAULT 380 out (interruptStatusPort),a 381 in a,(statusPort) 382 and STATUS_NON_83P_MASK 383 jr z,$F 384 in a,(memPageBPort) 536 385 cp 81h 537 386 jr dol2 538 $$: in a,( 7)387 $$: in a,(memPageBPort) 539 388 and 4Fh 540 389 cp 41h 541 390 dol2: jr nz,TurnCalculatorOn 542 bit 3,(iy+12h)391 bit shift2nd,(iy+shiftFlags) 543 392 jr z,_2ndNotPressedWithOn 544 bit 5,(iy+33h)393 bit echoKeyRemotely,(iy+scriptFlag) 545 394 jr nz,$F 546 bit 7,(iy+28h)395 bit returnOffKey,(iy+getKeyFlags) 547 396 jr z,PowerOff 548 $$: set 3,(iy+28h)397 $$: set kOffPressed,(iy+getKeyFlags) 549 398 ret 550 399 _2ndNotPressedWithOn: 551 res 7,(iy+0Fh) 400 ;We're (probably) turned on and we just happened to press ON 401 res turnOffIfLowBatteriesFound,(iy+batteryCheckFlags) 552 402 call resetAPDTimer 553 bit 3,(iy+9) 554 jr z,$F 555 set 4,(iy+9) 556 ret 557 $$: ;Turn back on 558 jr TurnCalculatorOn 559 PowerOff: 560 ld a,8 561 call _OUT_PORT_3 562 res 4,(iy+1) 563 res 3,(iy+12h) 564 res 3,(iy+9) 565 ld a,2 566 out (10h),a 567 ld a,6 568 out (4),a 569 ld a,11h 570 out (3),a 571 ex af,af' 572 exx 573 ei 574 haltLoop: 575 halt 576 jr haltLoop 577 GetCSC:ld hl,843Fh 578 di 579 ld a,(hl) 580 ld (hl),0 581 res 3,(iy+0) 582 ei 583 ret 584 _ZERO_PORT_3: 585 sub a 586 _OUT_PORT_3: 587 push af 588 ld a,8 589 out (3),a 590 pop af 591 out (3),a 592 sub a 593 out (31h),a 594 out (34h),a 595 out (37h),a 403 bit onRunning,(iy+onFlags) 404 jr z,TurnCalculatorOn 405 set onInterrupt,(iy+onFlags) 596 406 ret 597 407 … … 599 409 di 600 410 ;Basic port outputs 601 ld a,01h 602 out (10h),a 603 ld a,06h 604 out (4),a 605 ld a,11h 606 out (3),a 607 ld a,05h 608 out (10h),a 411 ld a,lcd8BitMode 412 call LCDDelay 413 out (LCDinstPort),a 414 ld a,STATE_MODE0_DEFAULT 415 out (interruptStatusPort),a 416 ld a,iNormal 417 out (interruptEnPort),a 418 ld a,lcdXAutoIncrementMode 419 call LCDDelay 420 out (LCDinstPort),a 609 421 ;Set up RAM pages 610 422 xor a 611 out ( 5),a423 out (memPageCPort),a 612 424 ;Set up RAM pointers 613 425 ld sp,0FFC5h 614 426 ld iy,flags 427 ;Do any other initialization 428 ;Appear "off" 429 xor a 430 out (memPageBPort),a 615 431 WaitForStart: 616 ld a, 6617 out ( 4),a432 ld a,STATE_MODE0_DEFAULT 433 out (interruptStatusPort),a 618 434 call _ZERO_PORT_3 619 ld a, 11h620 out ( 3),a435 ld a,iNormal 436 out (interruptEnPort),a 621 437 ei 622 438 halt 623 439 TurnCalculatorOn: 624 ld a,6 625 out (4),a 440 ;Set everything back up 441 ld a,STATE_MODE0_DEFAULT 442 out (interruptStatusPort),a 443 ld a,41h 444 call NZIf83Plus 445 jr nz,$F 626 446 ld a,81h 627 out (7),a447 $$: out (memPageBPort),a 628 448 ld a,1 629 out ( 20h),a630 xor a 449 out (speedPort),a 450 xor a ;Still not really sure what this is about 631 451 out (0Fh),a 632 452 call _ZERO_PORT_3 633 ld a,03h 634 out (10h),a 635 ld a,0Bh 636 out (3),a 637 set 3,(iy+9) 638 B_CALL UnlockFlash 639 xor a 640 ld de,3FFFh 641 ld b,0 642 B_CALL WriteAByte 643 ld hl,4 644 ld (curRow),hl 645 ld a,(3FFFh) 646 call DispHexA 453 ld a,lcdTurnOn 454 out (LCDinstPort),a 455 ld a,INTERRUPT_MASK_POWER+INTERRUPT_MASK_HW1+INTERRUPT_MASK_ON 456 out (interruptEnPort),a 457 set onRunning,(iy+onFlags) 458 ;Start the OS, minimal as it is 459 set indicRun,(iy+indicFlags) 647 460 ld hl,1 648 461 ld (curRow),hl … … 658 471 inc hl 659 472 ld (editBtm),hl 660 set 2,(iy+0Ch)661 473 ld a,' ' 662 474 ld (curUnder),a 475 set curAble,(iy+curFlags) 663 476 set apdAble,(iy+apdFlags) 664 477 set apdRunning,(iy+apdFlags) 665 $$: ld hl,6 478 $$: B_CALL getKey 479 ld hl,6 666 480 ld (curRow),hl 667 ei668 B_CALL getKey669 or a670 jr z,$B671 481 call DispHexA 672 482 cp 37h … … 682 492 DB "This is a test!",0 683 493 684 BCALL:685 push hl686 push hl687 push hl688 push af689 push bc690 push de691 push hl692 ld hl,15693 add hl,sp694 ld d,(hl)695 dec hl696 ld e,(hl)697 inc de698 inc de699 ld (hl),e700 inc hl701 ld (hl),d702 in a,(6)703 ld c,a704 dec hl705 dec hl706 dec hl707 ld (hl),a708 dec hl709 ;HACK: until I can figure out how to shift bits of addresses in ZDS...710 ld (hl),0711 dec hl712 ld (hl),75h713 dec de714 ex de,hl715 ld d,(hl)716 dec hl717 ld e,(hl)718 ld b,0719 bit 7,d720 jr nz,bootCodeCall721 bit 6,d722 jr z,multipageAppCall723 res 6,d724 ld a,7Dh725 jr $F726 bootCodeCall:727 res 7,d728 ld a,7Fh729 jr $F730 multipageAppCall:731 call getBasePage732 $$: call outputPage733 ld hl,4000h734 add hl,de735 ld e,l736 ld d,h737 ld hl,8738 add hl,sp739 ld a,(de)740 ld (hl),a741 inc de742 inc hl743 ld a,(de)744 ld (hl),a745 inc de746 ld a,b747 or a748 jr z,$F749 ld a,(de)750 neg751 add a,b752 jr BCALL_done753 $$: ld a,(de)754 or a755 jr nz,BCALL_done756 ld a,c757 BCALL_done:758 call outputPage759 pop hl760 pop de761 pop bc762 pop af763 ret764 getBasePage:765 ;TODO: come back to this...766 ret767 768 BJUMP:769 ex (sp),hl770 push af771 push bc772 push de773 in a,(6)774 ld c,a775 ld e,(hl)776 inc hl777 ld d,(hl)778 ld b,0779 bit 7,d780 jr nz,bootCodeJump781 bit 6,d782 jr z,multipageAppJump783 res 6,d784 ld a,7Dh785 jr $F786 bootCodeJump:787 res 7,d788 ld a,7Fh789 jr $F790 multipageAppJump:791 call getBasePage792 $$: call outputPage793 ld hl,4000h794 add hl,de795 ld e,(hl)796 inc hl797 ld d,(hl)798 inc hl799 ld a,b800 or a801 ld a,(hl)802 jr z,$F803 neg804 $$: add a,b805 jr nz,$F806 ld a,c807 $$: call outputPage808 ex de,hl809 pop de810 pop bc811 pop af812 ex (sp),hl813 ret814 815 JErrorNo:816 ;TODO: come back to this817 ret818 819 HandleLinkKeyActivity:820 nop821 nop822 di823 push af824 call NZIf83Plus825 jr nz,eiHaltRet826 in a,(9)827 and 0D9h828 jr z,$F829 bit 6,a830 call nz,setBit7IYPlus3Dh831 pop af832 ei833 ret834 $$: ld a,(9C86h)835 or a836 jr nz,$F837 eiHaltRet:838 pop af839 ei840 halt841 ret842 $$: pop af843 ei844 ret845 setBit7IYPlus3Dh:846 set 7,(iy+3Dh)847 ret848 -
trunk/page00/jumptable.asm
r2 r9 4 4 include "includes\os2.inc" 5 5 6 PUBLIC _OutputProtectedPort 6 PUBLIC _OutputProtectedPort,Page0Call 7 7 EXTERN OutputProtectedPort 8 8 -
trunk/page00/util.asm
r8 r9 2 2 SEGMENT PAGE00 3 3 4 PUBLIC PutS,PutC,ifastcopy,CallUSBActivityHook 4 PUBLIC PutS,PutC,ifastcopy,CallUSBActivityHook,CheckLowBatteriesTurnOff,_ZERO_PORT_3,_OUT_PORT_3 5 5 PUBLIC _APP_PUSH_ERRORH,_APP_POP_ERRORH,FindSym,PushRealO1,Mov9ToOP1,FPAdd,OP1ToOP2,LCDDelay 6 6 PUBLIC Placeholder005Fh,Placeholder0006h,Placeholder004Eh,Placeholder0003h,Placeholder0035h 7 PUBLIC outputPage,NZIf83Plus 8 PUBLIC DispHexA,DispHexHL,IPutC 9 PUBLIC curBlink,resetAPDTimer 7 PUBLIC outputPage,NZIf83Plus,AnimateRunIndicator,UpdateAPD,PowerOff,GetCSC 8 PUBLIC DispHexA,DispHexHL,IPutC,ReadKeyboardKey,BCALL,BJUMP,JErrorNo 9 PUBLIC curBlink,resetAPDTimer,SaveOScreen,RunLinkActivityHook,HandleLinkKeyActivity 10 EXTERN Page0Call 10 11 11 12 include "includes\os2.inc" … … 25 26 Placeholder005Fh: 26 27 ret 28 29 HandleLinkKeyActivity: 30 nop 31 nop 32 di 33 push af 34 call NZIf83Plus 35 jr nz,eiHaltRet 36 in a,(laStatusPort) 37 and 11011001b ;in the middle of any transmissions? 38 jr z,eiHaltRet 39 bit 6,a 40 call nz,setLinkAssistError 41 pop af 42 ei 43 ret 44 eiHaltRet: 45 pop af 46 ei 47 halt 48 ret 49 $$: pop af 50 ei 51 ret 52 setLinkAssistError: 53 set linkAssistError,(iy+linkAssistStatusFlags) 54 ret 55 56 BCALL: 57 push hl 58 push hl 59 push hl 60 push af 61 push bc 62 push de 63 push hl 64 ld hl,15 65 add hl,sp 66 ld d,(hl) 67 dec hl 68 ld e,(hl) 69 inc de 70 inc de 71 ld (hl),e 72 inc hl 73 ld (hl),d 74 in a,(6) 75 ld c,a 76 dec hl 77 dec hl 78 dec hl 79 ld (hl),a 80 dec hl 81 ;HACK: until I can figure out how to shift bits of addresses in ZDS... 82 ld (hl),0 83 dec hl 84 ld (hl),75h 85 dec de 86 ex de,hl 87 ld d,(hl) 88 dec hl 89 ld e,(hl) 90 ld b,0 91 bit 7,d 92 jr nz,bootCodeCall 93 bit 6,d 94 jr z,multipageAppCall 95 res 6,d 96 ld a,7Dh 97 jr $F 98 bootCodeCall: 99 res 7,d 100 ld a,7Fh 101 jr $F 102 multipageAppCall: 103 call getBasePage 104 $$: call outputPage 105 ld hl,4000h 106 add hl,de 107 ld e,l 108 ld d,h 109 ld hl,8 110 add hl,sp 111 ld a,(de) 112 ld (hl),a 113 inc de 114 inc hl 115 ld a,(de) 116 ld (hl),a 117 inc de 118 ld a,b 119 or a 120 jr z,$F 121 ld a,(de) 122 neg 123 add a,b 124 jr BCALL_done 125 $$: ld a,(de) 126 or a 127 jr nz,BCALL_done 128 ld a,c 129 BCALL_done: 130 call outputPage 131 pop hl 132 pop de 133 pop bc 134 pop af 135 ret 136 getBasePage: 137 ;TODO: come back to this... 138 ret 139 140 BJUMP: 141 ex (sp),hl 142 push af 143 push bc 144 push de 145 in a,(6) 146 ld c,a 147 ld e,(hl) 148 inc hl 149 ld d,(hl) 150 ld b,0 151 bit 7,d 152 jr nz,bootCodeJump 153 bit 6,d 154 jr z,multipageAppJump 155 res 6,d 156 ld a,7Dh 157 jr $F 158 bootCodeJump: 159 res 7,d 160 ld a,7Fh 161 jr $F 162 multipageAppJump: 163 call getBasePage 164 $$: call outputPage 165 ld hl,4000h 166 add hl,de 167 ld e,(hl) 168 inc hl 169 ld d,(hl) 170 inc hl 171 ld a,b 172 or a 173 ld a,(hl) 174 jr z,$F 175 neg 176 $$: add a,b 177 jr nz,$F 178 ld a,c 179 $$: call outputPage 180 ex de,hl 181 pop de 182 pop bc 183 pop af 184 ex (sp),hl 185 ret 186 187 JErrorNo: 188 ;TODO: come back to this 189 ret 190 191 ReadKeyboardKey: 192 call ReadKeypad 193 jr nc,$F 194 ld a,0FFh 195 ld (8441h),a 196 ld a,5 197 ld (8443h),a 198 ret 199 $$: ld hl,8441h 200 cp (hl) 201 ld hl,8443h 202 jr z,$F 203 ld (8441h),a 204 ld (hl),5 205 $$: or a 206 jr nz,$F 207 dec (hl) 208 ret nz 209 inc (hl) 210 $$: ld hl,8440h 211 cp (hl) 212 jr nz,rkk1 213 or a 214 ret z 215 cp 0F3h 216 jr nc,$F 217 cp 38h 218 jr z,$F 219 cp 5 220 ret nc 221 $$: ld hl,8442h 222 dec (hl) 223 ret nz 224 ld (hl),0Ah 225 jr setKbdKey 226 rkk1: call setKbdKey 227 or a 228 jr z,$F 229 set 4,(iy+0) 230 $$: ld (hl),a 231 ld a,32h 232 ld (8442h),a 233 ret 234 setKbdKey: 235 ld (843Fh),a 236 set 3,(iy+0) 237 or a 238 ret z 239 ld (8445h),a 240 ret 241 ReadKeypad: 242 sub a 243 call ReadPort1 244 xor 0FFh 245 ret z 246 ld hl,0 247 ld c,0FEh 248 ld d,1 249 rk1: ld a,c 250 bit 0,(iy+2Ch) 251 jr z,$F 252 cp 0FEh 253 jr nz,$F 254 call ReadPort1 255 cp 0F5h 256 ret z 257 cp 0F3h 258 ret z 259 cp 0FAh 260 ret z 261 cp 0FCh 262 ret z 263 jr rk3 264 $$: call ReadPort1 265 rk3: ld e,0 266 ld b,8 267 rk2: rla 268 jr c,$F 269 inc e 270 ld l,b 271 $$: djnz rk2 272 ld a,e 273 or a 274 jr z,$F 275 cp 2 276 jr nc,scfRet 277 ld a,h 278 or a 279 jr nz,scfRet 280 ld h,d 281 $$: inc d 282 rlc c 283 jr c,rk1 284 ld a,h 285 or a 286 ret z 287 dec a 288 rla 289 rla 290 rla 291 add a,l 292 ret 293 scfRet:scf 294 ret 295 ReadPort1: 296 push af 297 in a,(2) 298 and 80h 299 jr nz,rp1SE 300 rp1_1: pop af 301 out (1),a 302 rp1_2: nop 303 nop 304 nop 305 nop 306 in a,(1) 307 ld b,a 308 ld a,0FFh 309 out (1),a 310 ld a,b 311 ret 312 rp1SE: in a,(20h) 313 and 1 314 jr z,rp1_1 315 pop af 316 out (1),a 317 nop 318 nop 319 nop 320 jr rp1_2 321 322 PowerOff: 323 ld a,8 324 call _OUT_PORT_3 325 res 4,(iy+1) 326 res 3,(iy+12h) 327 res 3,(iy+9) 328 ld a,2 329 out (10h),a 330 ld a,6 331 out (4),a 332 ld a,11h 333 out (3),a 334 ex af,af' 335 exx 336 ei 337 $$: halt 338 jr $B 339 GetCSC:ld hl,843Fh 340 di 341 ld a,(hl) 342 ld (hl),0 343 res 3,(iy+0) 344 ei 345 ret 346 347 UpdateAPD: 348 ld a,(flags+apdFlags) 349 bit apdAble,a 350 ret z 351 bit apdRunning,a 352 ret z 353 ld hl,apdSubTimer 354 dec (hl) 355 ret nz 356 inc hl 357 dec (hl) 358 ret nz 359 ld a,lcdTurnOff 360 out (LCDinstPort),a 361 call SaveOScreen 362 res apdRunning,(iy+apdFlags) 363 set apdWarmStart,(iy+apdFlags) 364 jr PowerOff 365 366 RunLinkActivityHook: 367 push af 368 ld hl,LinkActivityHookBlock 369 call GetHookByte 370 jr z,RunHook 371 pop af 372 res LinkActivityHookEnabled,(iy+33h) 373 ret 374 RunHook: 375 pop af 376 ld (9C22h),a 377 in a,(20h) 378 push af 379 bit 5,(iy+24h) 380 call ZIfSlowSpeed 381 pop af 382 push af 383 ld a,(9C22h) 384 push hl 385 ld hl,9CAEh 386 inc (hl) 387 ld hl,0DEEh 388 ex (sp),hl 389 push hl 390 ld hl,RunHookRet 391 ex (sp),hl 392 push hl 393 ld hl,9B75h 394 ex (sp),hl 395 jr Page0Call 396 RunHookSafeRet: 397 pop af 398 push hl 399 ld hl,9CAEh 400 dec (hl) 401 pop hl 402 call NZIf83Plus 403 jr nz,$F 404 and 1 405 out (20h),a 406 $$: pop af 407 pop af 408 pop af 409 ret 410 RunHookRet: 411 push af 412 push hl 413 ld hl,9CAEh 414 dec (hl) 415 pop hl 416 call NZIf83Plus 417 jr nz,$F 418 pop af 419 ld (9C22h),bc 420 pop bc 421 pop bc 422 push af 423 ld a,b 424 and 1 425 out (20h),a 426 pop af 427 ld bc,(9C22h) 428 ret 429 $$: pop af 430 inc sp 431 inc sp 432 inc sp 433 inc sp 434 ret 435 GetHookByte: 436 push bc 437 push de 438 ld e,(hl) 439 inc hl 440 ld d,(hl) 441 inc hl 442 ld a,(hl) 443 cp 0FFh 444 jr z,$F 445 ld (9B77h),a 446 ex de,hl 447 call GetBytePaged 448 inc hl 449 ld (9B75h),hl 450 ld a,b 451 $$: pop de 452 pop bc 453 cp 83h 454 ret 455 ZIfSlowSpeed: 456 jr z,ForceSlowSpeed 457 SetFastSpeed: 458 push af 459 call NZIf83Plus 460 jr nz,$F 461 ld a,1 462 out (20h),a 463 $$: pop af 464 ret 465 ForceSlowSpeed: 466 call NZIf83Plus 467 ret nz 468 push af 469 xor a 470 out (20h),a 471 pop af 472 ret 473 474 _ZERO_PORT_3: 475 sub a 476 _OUT_PORT_3: 477 push af 478 ld a,INTERRUPT_MASK_POWER 479 out (interruptEnPort),a 480 pop af 481 out (interruptEnPort),a 482 sub a 483 out (31h),a 484 out (34h),a 485 out (37h),a 486 ret 487 488 CheckLowBatteriesTurnOff: 489 ld a,STATE_MODE0_DEFAULT 490 out (interruptStatusPort),a 491 bit batteriesGood,(iy+interruptFlags) 492 ret nz 493 xor a 494 out (57h),a 495 out (5Bh),a 496 in a,(54h) 497 bit 1,a 498 jr nz,$F 499 ;ViewScreen attached? Maybe? Not sure. 500 ld a,2 501 out (54h),a 502 xor a 503 out (4Ch),a 504 $$: pop hl 505 pop hl 506 ld a,lcdTurnOff ;turn off the LCD 507 out (LCDinstPort),a 508 res enableHW2Timer,(iy+interruptFlags) 509 ld hl,0A55Ah ;set special checksum for power on from forced turnoff 510 ld (RAMChecksum),hl 511 ld a,INTERRUPT_MASK_ON ;this is putting the calculator in low power mode 512 out (interruptEnPort),a 513 res shift2nd,(iy+shiftFlags) 514 res onRunning,(iy+onFlags) 515 res turnOffIfLowBatteriesFound,(iy+batteryCheckFlags) 516 ld a,STATE_MODE0_DEFAULT 517 out (interruptStatusPort),a 518 xor a 519 out (memPageBPort),a 520 ei 521 $$: halt 522 jr $B 523 524 SaveOScreen: 525 ;Save LCD contents to saveSScreen from APD power-off 526 ;TODO: come back to this 527 ret 528 529 AnimateRunIndicator: 530 ld hl,indicCounter 531 dec (hl) 532 ret nz 533 ;Animate it 534 ld hl,(curRow) 535 push hl 536 ld hl,6 537 ld (curRow),hl 538 ld a,(appBackUpScreen+100) 539 or a 540 jr z,$F 541 xor a 542 ld (appBackUpScreen+100),a 543 ld a,' ' 544 call PutC 545 pop hl 546 ld (curRow),hl 547 ret 548 $$: ld a,1 549 ld (appBackUpScreen+100),a 550 ld a,'B' 551 call PutC 552 pop hl 553 ld (curRow),hl 554 ret 555 27 556 28 557 CallUSBActivityHook: -
trunk/page01/01base.asm
r3 r9 11 11 call DisplayShift 12 12 call GetCSC 13 bit 4,(iy+09h) 13 bit onInterrupt,(iy+onFlags) 14 res onInterrupt,(iy+onFlags) 14 15 jr z,$F 15 16 xor a -
trunk/page02/02base.asm
r8 r9 3 3 4 4 PUBLIC HandleUSBInterruptInitialize,HandleDefaultUSBInterrupt,ReadUSBInterruptData 5 PUBLIC HandleUSBACablePluggedIn,HandleUSBACableUnplugged,HandleUSBBCablePluggedIn,HandleUSBBCableUnplugged 5 6 6 7 ;TODO: deal with all these USB events, somehow 8 HandleUSBACablePluggedIn: 9 HandleUSBACableUnplugged: 10 HandleUSBBCablePluggedIn: 11 HandleUSBBCableUnplugged: 7 12 HandleUSBInterruptInitialize: 8 13 HandleDefaultUSBInterrupt:
