Changeset 8


Ignore:
Timestamp:
Jul 25, 2009, 1:44:47 AM (10 years ago)
Author:
brandonlw
Message:

More clean-up involving USB and the interrupt

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/os2.inc

    r7 r8  
    6363editBtm              EQU    96FAh 
    6464; 
     65USBActivityHookBlock EQU    9BD4h 
     66; 
     67offPageCallPage      EQU    9C83h 
     68offPageCallAddress   EQU    9C84h 
     69; 
    6570userMem              EQU    9D95h 
    6671symTable             EQU    0FE66h 
     
    8489;           System and State Flags 
    8590;====================================================================== 
    86 apdFlags             EQU    08h    ;Automatic Power Down 
    87 apdAble              EQU    2      ;1=APD enabled 
    88 apdRunning           EQU    3      ;1=APD clock running 
    89  
    90 interruptFlags       EQU    16h 
    91 enableHW2Timer       EQU    0      ;1=enable second hardware timer 
    92 skipHW2Timer         EQU    1      ;1=skip this firing of HW timer 2 (makes it last a little longer) 
    93 batteriesGood        EQU    2      ;1=batteries are good 
    94  
    95 linkKeyFlags         EQU    18h 
    96 hw2TimerSkipped      EQU    2      ;1=this firing of HW 2 timer skipped (state of skipHW2Timer,(iy+interruptFlags) 
     91apdFlags                    EQU    08h    ;Automatic Power Down 
     92apdAble                     EQU    2      ;1=APD enabled 
     93apdRunning                  EQU    3      ;1=APD clock running 
     94 
     95onFlags                     EQU    09h 
     96onRunning                   EQU    3      ;1=calculator is running 
     97onInterrupt                 EQU    4      ;1=ON key pressed during interrupt 
     98 
     99interruptFlags              EQU    16h 
     100enableHW2Timer              EQU    0      ;1=enable second hardware timer 
     101skipHW2Timer                EQU    1      ;1=skip this firing of HW timer 2 (makes it last a little longer) 
     102batteriesGood               EQU    2      ;1=batteries are good 
     103 
     104linkKeyFlags                EQU    18h 
     105hw2TimerSkipped             EQU    2      ;1=this firing of HW 2 timer skipped (state of skipHW2Timer,(iy+interruptFlags) 
     106 
     107hookFlags4                  EQU    3Ah 
     108USBActivityHookEnabled      EQU    0 
    97109 
    98110;---------------------------------------------------------------------- 
  • trunk/page00/boot.asm

    r7 r8  
    55 
    66 PUBLIC JErrorNo,GetCSC,HandleLinkKeyActivity 
    7  EXTERN PutS,PutC,ifastcopy 
     7 EXTERN PutS,PutC,ifastcopy,CallUSBActivityHook 
    88 EXTERN _APP_PUSH_ERRORH,_APP_POP_ERRORH,FindSym,PushRealO1,Mov9ToOP1,FPAdd,OP1ToOP2,LCDDelay 
    99 EXTERN Placeholder005Fh,Placeholder0006h,Placeholder004Eh,Placeholder0003h,Placeholder0035h 
    10  EXTERN outputPage 
     10 EXTERN outputPage,NZIf83Plus 
    1111 EXTERN DispHexA,DispHexHL,IPutC 
    1212 EXTERN curBlink,resetAPDTimer 
    1313 EXTERN _UnlockFlash,_LockFlash 
     14 EXTERN HandleDefaultUSBInterrupt,ReadUSBInterruptData,HandleUSBInterruptInitialize 
    1415 
    1516;0000h: 
     
    130131       and 1Fh 
    131132       jr z,resumeInterruptHandler 
    132        ;TODO: Do USB stuff 
     133       bit USBActivityHookEnabled,(iy+hookFlags4) 
     134       jr z,$F 
     135       ld b,2Ch 
     136       ld c,a 
     137       call CallUSBActivityHook 
     138       jr z,interruptReturnA 
     139$$:    in a,(usbEventPort) 
     140       ld b,a 
     141       or a 
     142       jr z,noUSBEvents 
     143       bit onRunning,(iy+onFlags) 
     144       jr z,linkActivityDetectedTurnOn    ;turn on the calculator because we have link stuff going on 
     145       in a,(7) 
     146       cp 81h 
     147       jr nz,linkActivityDetectedTurnOn 
     148       ld a,b 
     149       bit 4,a 
     150       jr nz,AcablePluggedIn 
     151       bit 5,a 
     152       jr nz,AcableUnplugged 
     153       bit 6,a 
     154       jr nz,BcablePluggedIn 
     155       bit 7,a 
     156       jr nz,BcableUnplugged 
     157       bit 1,a 
     158       jr nz,usbInitializeDetected 
     159noUSBEvents: 
     160       in a,(55h) 
     161       ld b,a 
     162       and 11h 
     163       xor 11h 
     164       jr z,resumeInterruptHandler 
     165       in a,(7) 
     166       cp 81h 
     167       jr nz,linkActivityDetectedTurnOn   ;turn on the calculator because we have link stuff going on 
     168       bit 4,b 
     169       jr z,readUSBData 
     170       ;Handle default USB interrupt, I guess 
     171       call HandleDefaultUSBInterrupt 
     172       jr $F 
     173readUSBData: 
     174       call ReadUSBInterruptData 
     175$$:    bit onRunning,(iy+onFlags) 
     176       jr z,linkActivityDetectedTurnOn 
     177       jr interruptReturnA 
     178AcablePluggedIn: 
     179       jr interruptReturnA 
     180AcableUnplugged: 
     181       jr interruptReturnA 
     182BcablePluggedIn: 
     183       jr interruptReturnA 
     184BcableUnplugged: 
     185       jr interruptReturnA 
     186usbInitializeDetected: 
     187       call HandleUSBInterruptInitialize 
     188       jr interruptReturnA 
    133189continueInterruptHandler: 
    134190       bit INT_TRIGGER_HW2,a 
    135191       jr nz,secondHardwareTimerTriggered 
    136192       bit INT_TRIGGER_LINK,a 
    137        jr nz,linkActivityDetected 
     193       jr nz,linkActivityDetectedTurnOn 
    138194       rra 
    139195       jr c,onKeyPressed 
     
    149205interruptReturnStandard: 
    150206       ld a,iNormal 
    151        bit 0,(iy+16h) 
     207       bit enableHW2Timer,(iy+interruptFlags) 
    152208       jr z,interruptDirectReturnA 
    153209interruptReturnEnableTimer2: 
     
    160216       reti 
    161217secondHardwareTimerTriggered: 
    162 ;This only fires when 0,(iy+16h) is set, and that's only done by _GetKey. 
     218;This only fires when enableHW2Timer,(iy+interruptFlags) is set, and that's only done by _getKey. 
    163219       ld a,INTERRUPT_MASK_HW2 
    164220       bit enableHW2Timer,(iy+interruptFlags) 
     
    194250       out (interruptEnPort),a 
    195251       jr interruptReturnEnableTimer2 
    196  
    197252firstCrystalTimerExpired: 
    198253secondCrystalTimerExpired: 
    199254thirdCrystalTimerExpired: 
    200        ;TODO: handle these 
    201        ;di 
    202        ;halt 
     255;I'm not using these, so any interrupts generated by them should just be acknowledged and forgotten. 
    203256       xor a 
    204257       out (31h),a 
     
    207260       jr interruptReturnStandard 
    208261firstHardwareTimerTriggered: 
    209        res 7,(iy+33h) 
    210        res 2,(iy+18h) 
    211        bit 0,(iy+16h) 
     262       res hw2TimerSkipped,(iy+linkKeyFlags) 
     263       bit enableHW2Timer,(iy+interruptFlags) 
    212264       jr z,$F 
    213265       bit 7,(iy+0Fh) 
     
    412464       nop 
    413465       jr rp1_2 
    414 linkActivityDetected: 
     466linkActivityDetectedTurnOn: 
    415467       res 3,(iy+12h) 
    416468       push hl 
     
    561613       ld sp,0FFC5h 
    562614       ld iy,flags 
    563 ;       ld a,03h 
    564 ;       out (10h),a 
    565615WaitForStart: 
    566616       ld a,6 
     
    797847       ret 
    798848 
    799 NZIf83Plus: 
    800        push bc 
    801        push af 
    802        in a,(2) 
    803        and 80h 
    804        xor 80h 
    805        pop bc 
    806        ld a,b 
    807        pop bc 
    808        ret 
    809  
  • trunk/page00/util.asm

    r2 r8  
    22 SEGMENT PAGE00 
    33 
    4  PUBLIC PutS,PutC,ifastcopy 
     4 PUBLIC PutS,PutC,ifastcopy,CallUSBActivityHook 
    55 PUBLIC _APP_PUSH_ERRORH,_APP_POP_ERRORH,FindSym,PushRealO1,Mov9ToOP1,FPAdd,OP1ToOP2,LCDDelay 
    66 PUBLIC Placeholder005Fh,Placeholder0006h,Placeholder004Eh,Placeholder0003h,Placeholder0035h 
    7  PUBLIC outputPage 
     7 PUBLIC outputPage,NZIf83Plus 
    88 PUBLIC DispHexA,DispHexHL,IPutC 
    99 PUBLIC curBlink,resetAPDTimer 
     
    2626       ret 
    2727 
     28CallUSBActivityHook: 
     29       ld hl,USBActivityHookBlock 
     30       ld e,(hl) 
     31       inc hl 
     32       ld d,(hl) 
     33       inc hl 
     34       ld a,(hl) 
     35       cp 0FFh 
     36       jr z,noUSBActivityHook 
     37       push bc 
     38       ld (offPageCallPage),a 
     39       ex de,hl 
     40       call GetBytePaged 
     41       inc hl 
     42       ld a,b 
     43       cp 83h 
     44       pop bc 
     45       jr z,$F 
     46noUSBActivityHook: 
     47       res USBActivityHookEnabled,(iy+hookFlags4) 
     48       or 1 
     49       ret 
     50$$:    ld (offPageCallAddress),hl 
     51       call MakeOffPageCall 
     52       ld a,b 
     53       or a 
     54       ret 
     55 
     56MakeOffPageCall: 
     57       in a,(memPageAPort) 
     58       push af 
     59       ld a,(offPageCallPage) 
     60       out (6),a 
     61       ld hl,P1OutputRet 
     62       push hl 
     63       ld hl,(offPageCallAddress) 
     64       jp (hl) 
     65P1OutputRet: 
     66       pop af 
     67outMemPageAPort: 
     68       out (memPageAPort),a 
     69       ret 
     70 
     71GetBytePaged: 
     72       or a 
     73       ret z 
     74       ld b,a 
     75       in a,(memPageAPort) 
     76       ld c,a 
     77       ld a,b 
     78       out (memPageAPort),a 
     79       ld b,(hl) 
     80       ld a,c 
     81       jr outMemPageAPort 
     82 
    2883outputPage: 
    2984       call translatePage 
  • trunk/page02/02base.asm

    r4 r8  
    22 SEGMENT PAGE02 
    33 
     4 PUBLIC HandleUSBInterruptInitialize,HandleDefaultUSBInterrupt,ReadUSBInterruptData 
     5 
     6;TODO: deal with all these USB events, somehow 
     7HandleUSBInterruptInitialize: 
     8HandleDefaultUSBInterrupt: 
     9ReadUSBInterruptData: 
    410       ret 
    511 
Note: See TracChangeset for help on using the changeset viewer.