Changeset 9


Ignore:
Timestamp:
Jul 25, 2009, 4:38:35 AM (10 years ago)
Author:
brandonlw
Message:

boot.asm is now cleaned up! Unfortunately, it feels like I just offloaded everything to other files. :(

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/os2.inc

    r8 r9  
    3838; System-defined RAM Variable Address Equates 
    3939;====================================================================== 
    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 
     40ramStart                    EQU    8000h 
     41appData                     EQU    8000h 
     42ramCode                     EQU    8100h 
     43; 
     44ramCodeEnd                  EQU    822Fh 
     45; 
     46apdSubTimer                 EQU    8448h 
     47apdTimer                    EQU    8449h 
     48curTime                     EQU    844Ah 
     49curRow                      EQU    844Bh 
     50curCol                      EQU    844Ch 
     51; 
     52curUnder                    EQU    844Eh 
     53; 
     54indicCounter                EQU    8476h 
     55; 
     56RAMChecksum                 EQU    85BEh 
     57; 
     58flags                       EQU    89F0h ;IY is always set to this 
     59; 
     60statVars                    EQU    8A3Ah 
     61; 
     62anovaf_vars                 EQU    8C17h 
     63; 
     64editTop                     EQU    96F4h 
     65editCursor                  EQU    96F6h 
     66editTail                    EQU    96F8h 
     67editBtm                     EQU    96FAh 
     68; 
     69appBackUpScreen             EQU    9872h 
     70; 
     71LinkActivityHookBlock       EQU    9B78h 
     72; 
     73USBActivityHookBlock        EQU    9BD4h 
     74; 
     75offPageCallPage             EQU    9C83h 
     76offPageCallAddress          EQU    9C84h 
     77; 
     78userMem                     EQU    9D95h 
     79symTable                    EQU    0FE66h 
    7280 
    7381;====================================================================== 
     
    92100apdAble                     EQU    2      ;1=APD enabled 
    93101apdRunning                  EQU    3      ;1=APD clock running 
     102apdWarmStart                EQU    4      ;1=APD timer expired, soft power on is pending 
    94103 
    95104onFlags                     EQU    09h 
    96105onRunning                   EQU    3      ;1=calculator is running 
    97106onInterrupt                 EQU    4      ;1=ON key pressed during interrupt 
     107 
     108curFlags                    EQU    0Ch 
     109curAble                     EQU    2      ;1=cursor flash is enabled 
     110curOn                       EQU    3      ;1=cursor is showing 
     111curLock                     EQU    4      ;1=cursor is locked off 
     112 
     113batteryCheckFlags           EQU    0Fh 
     114turnOffIfLowBatteriesFound  EQU    7      ;1=if low batteries detected, shut the calculator off 
     115 
     116indicFlags                  EQU    12h 
     117indicRun                    EQU    0      ;1=run indicator on 
     118indicOnly                   EQU    2      ;1=interrupt handler only checks run indicator 
     119shiftFlags                  EQU    12h 
     120shift2nd                    EQU    3      ;1=2nd has been pressed 
     121shiftAlpha                  EQU    4      ;1=[ALPHA] has been pressed 
     122shiftLwrAlph                EQU    5      ;1=lower case, 0=upper case 
     123shiftALock                  EQU    6      ;1=[2nd][ALPHA] has been pressed 
     124shiftKeepAlph               EQU    7      ;1=cannot cancel alpha lock 
    98125 
    99126interruptFlags              EQU    16h 
     
    105132hw2TimerSkipped             EQU    2      ;1=this firing of HW 2 timer skipped (state of skipHW2Timer,(iy+interruptFlags) 
    106133 
     134getKeyFlags                 EQU    28h 
     135kOffPressed                 EQU    3      ;1=[2nd][ON] was pressed (I think) 
     136returnOffKey                EQU    7      ;1=return kOff key code instead of turning off 
     137 
    107138hookFlags4                  EQU    3Ah 
    108139USBActivityHookEnabled      EQU    0 
     140 
     141linkAssistStatusFlags       EQU    3Dh 
     142linkAssistError             EQU    7 
     143 
     144linkAssistFlags             EQU    3Eh 
     145linkAssistEnabled           EQU    0      ;1=link assist enabled (SE/84+ only) 
    109146 
    110147;---------------------------------------------------------------------- 
    111148;           Available for Assembly Programming 
    112149;---------------------------------------------------------------------- 
    113 asm_Flag1     EQU  21h 
    114 asm_Flag2     EQU  22h 
    115 asm_Flag3     EQU  23h 
     150asm_Flag1                   EQU  21h 
     151asm_Flag2                   EQU  22h 
     152asm_Flag3                   EQU  23h 
     153 
     154scriptFlag                  EQU    33h 
     155ignoreBPLink                EQU    3      ;1=link activity hook override, will not be called 
     156LinkActivityHookEnabled     EQU    4      ;1=link activity hook enabled 
     157echoKeyRemotely             EQU    5      ;1=echo keypresses back through linkport as remote control requests 
     158intBattCheckComplete        EQU    7      ;1=second hardware timer code has set battery state 
    116159 
    117160;====================================================================== 
     
    28612904usbStatusPort        EQU    55h 
    28622905usbEventPort         EQU    56h 
     2906laEnPort             EQU    08h 
     2907laStatusPort         EQU    09h 
     2908laReceivePort        EQU    0Ah 
     2909laSendPort           EQU    0Dh 
    28632910 
    28642911;====================================================================== 
     
    28712918statusIs84PHardware  EQU    5 
    28722919statusIsSE84P        EQU    7 
     2920STATUS_NON_83P_MASK  EQU    80h 
    28732921 
    28742922;====================================================================== 
     
    28872935INT_TRIGGER_HW2      EQU    2 
    28882936INT_STATUS_ON        EQU    3 
     2937INT_STATUS_ON_MASK   EQU    8 
    28892938INT_TRIGGER_LINK     EQU    4 
    28902939INT_TRIGGER_TIMER1   EQU    5 
     
    29032952 
    29042953;====================================================================== 
    2905 ;       LCD Driver equates 
    2906 ;====================================================================== 
    2907 LCDinstPort     equ 10h 
    2908 LCDdataPort equ 11h 
    2909 ; 
     2954; LCD Driver Equates 
     2955;====================================================================== 
     2956LCDinstPort                 EQU    10h 
     2957lcd8BitMode                 EQU    01h 
     2958lcdTurnOff                  EQU    02h 
     2959lcdTurnOn                   EQU    03h 
     2960lcdXAutoIncrementMode       EQU    05h 
     2961LCDdataPort                 EQU    11h 
     2962 
     2963;====================================================================== 
     2964; Other Port Equates 
     2965;====================================================================== 
     2966speedPort            EQU    20h 
     2967 
    29102968;====================================================================== 
    29112969;       Graph style definitions 
    29122970;====================================================================== 
    2913 ; 
    29142971GSline          equ     0               ;Func, Param, and Polar modes default 
    29152972GSthick         equ     1 
  • trunk/page00/boot.asm

    r8 r9  
    44 include "includes\os2.inc" 
    55 
    6  PUBLIC JErrorNo,GetCSC,HandleLinkKeyActivity 
    7  EXTERN PutS,PutC,ifastcopy,CallUSBActivityHook 
     6 EXTERN PutS,PutC,ifastcopy,CallUSBActivityHook,CheckLowBatteriesTurnOff,SaveOScreen 
     7 EXTERN RunLinkActivityHook,HandleLinkKeyActivity 
    88 EXTERN _APP_PUSH_ERRORH,_APP_POP_ERRORH,FindSym,PushRealO1,Mov9ToOP1,FPAdd,OP1ToOP2,LCDDelay 
    99 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 
    1313 EXTERN _UnlockFlash,_LockFlash 
    1414 EXTERN HandleDefaultUSBInterrupt,ReadUSBInterruptData,HandleUSBInterruptInitialize 
     15 EXTERN HandleUSBACablePluggedIn,HandleUSBACableUnplugged,HandleUSBBCablePluggedIn,HandleUSBBCableUnplugged 
    1516 
    1617;0000h: 
     
    177178       jr interruptReturnA 
    178179AcablePluggedIn: 
     180       call HandleUSBACablePluggedIn 
    179181       jr interruptReturnA 
    180182AcableUnplugged: 
     183       call HandleUSBACableUnplugged 
    181184       jr interruptReturnA 
    182185BcablePluggedIn: 
     186       call HandleUSBBCablePluggedIn 
    183187       jr interruptReturnA 
    184188BcableUnplugged: 
     189       call HandleUSBBCableUnplugged 
    185190       jr interruptReturnA 
    186191usbInitializeDetected: 
     
    235240       res hw2TimerSkipped,(iy+linkKeyFlags) 
    236241       res enableHW2Timer,(iy+interruptFlags)    ;disable HW2 timer, we're done 
     242       set intBattCheckComplete,(iy+scriptFlag) 
    237243       ld a,INTERRUPT_MASK_POWER+INTERRUPT_MASK_ON 
    238244       jr interruptReturnA 
     
    260266       jr interruptReturnStandard 
    261267firstHardwareTimerTriggered: 
     268       res intBattCheckComplete,(iy+scriptFlag) 
    262269       res hw2TimerSkipped,(iy+linkKeyFlags) 
    263270       bit enableHW2Timer,(iy+interruptFlags) 
    264271       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) 
    279281       call nz,curBlink 
    280282       call UpdateAPD 
    281283       ;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 
    322300       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 
     304interruptReturnOn: 
     305       ld a,INTERRUPT_MASK_POWER+INTERRUPT_MASK_ON 
     306       jr interruptReturnA 
    466307linkActivityDetectedTurnOn: 
    467        res 3,(iy+12h) 
     308       res shift2nd,(iy+shiftFlags) 
    468309       push hl 
    469310       sub a 
    470311       push af 
    471        ld a,8 
    472        out (3),a 
     312       ld a,INTERRUPT_MASK_POWER 
     313       out (interruptEnPort),a 
    473314       pop af 
    474        out (3),a 
     315       out (interruptEnPort),a 
     316;Turn ourselves on if we're not already 
    475317       jr handleWokenUp 
    476318onKeyPressed: 
    477319       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 
    480324       jr interruptReturnA 
    481325HandleOnKeyPress: 
    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) 
    486331       ld e,a 
    487332       xor a 
    488        out (20h),a 
     333       out (speedPort),a 
    489334$$:    ld b,0 
    490335debounceOnLoop: 
    491        ld hl,1016h 
    492 $$:    in a,(4) 
    493        and 8 
     336       ld hl,1016h                 ;hard-coded debounce delay at 6MHz 
     337$$:    in a,(interruptStatusPort) 
     338       and INT_STATUS_ON_MASK 
    494339       cp b 
    495340       ld b,a 
     
    501346       cp b 
    502347       jr z,handleKeyOn 
    503        in a,(7) 
     348       ;We just released ON, either boot or return 
     349       in a,(memPageBPort) 
    504350       ld b,a 
    505        in a,(2) 
    506        and 80h 
     351       in a,(statusPort) 
     352       and STATUS_NON_83P_MASK 
    507353       jr z,$F 
    508354       ld a,e 
    509        out (20h),a 
     355       out (speedPort),a 
    510356       ld a,b 
    511357       cp 81h 
     
    515361       cp 41h 
    516362dol1:  jr nz,WaitForStart 
    517        bit 3,(iy+9) 
     363       bit onRunning,(iy+onFlags) 
    518364       ret nz 
    519365       pop hl 
    520366       call _ZERO_PORT_3 
    521        ld a,11h 
     367       ld a,iNormal 
    522368       jr interruptDirectReturnA 
    523369handleKeyOn: 
    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 
    526373       jr z,handleWokenUp 
    527374       ld a,e 
    528        out (20h),a 
     375       out (speedPort),a 
    529376handleWokenUp: 
    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) 
    536385       cp 81h 
    537386       jr dol2 
    538 $$:    in a,(7) 
     387$$:    in a,(memPageBPort) 
    539388       and 4Fh 
    540389       cp 41h 
    541390dol2:  jr nz,TurnCalculatorOn 
    542        bit 3,(iy+12h) 
     391       bit shift2nd,(iy+shiftFlags) 
    543392       jr z,_2ndNotPressedWithOn 
    544        bit 5,(iy+33h) 
     393       bit echoKeyRemotely,(iy+scriptFlag) 
    545394       jr nz,$F 
    546        bit 7,(iy+28h) 
     395       bit returnOffKey,(iy+getKeyFlags) 
    547396       jr z,PowerOff 
    548 $$:    set 3,(iy+28h) 
     397$$:    set kOffPressed,(iy+getKeyFlags) 
    549398       ret 
    550399_2ndNotPressedWithOn: 
    551        res 7,(iy+0Fh) 
     400;We're (probably) turned on and we just happened to press ON 
     401       res turnOffIfLowBatteriesFound,(iy+batteryCheckFlags) 
    552402       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) 
    596406       ret 
    597407 
     
    599409       di 
    600410       ;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 
    609421       ;Set up RAM pages 
    610422       xor a 
    611        out (5),a 
     423       out (memPageCPort),a 
    612424       ;Set up RAM pointers 
    613425       ld sp,0FFC5h 
    614426       ld iy,flags 
     427       ;Do any other initialization 
     428       ;Appear "off" 
     429       xor a 
     430       out (memPageBPort),a 
    615431WaitForStart: 
    616        ld a,6 
    617        out (4),a 
     432       ld a,STATE_MODE0_DEFAULT 
     433       out (interruptStatusPort),a 
    618434       call _ZERO_PORT_3 
    619        ld a,11h 
    620        out (3),a 
     435       ld a,iNormal 
     436       out (interruptEnPort),a 
    621437       ei 
    622438       halt 
    623439TurnCalculatorOn: 
    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 
    626446       ld a,81h 
    627        out (7),a 
     447$$:    out (memPageBPort),a 
    628448       ld a,1 
    629        out (20h),a 
    630        xor a 
     449       out (speedPort),a 
     450       xor a         ;Still not really sure what this is about 
    631451       out (0Fh),a 
    632452       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) 
    647460       ld hl,1 
    648461       ld (curRow),hl 
     
    658471       inc hl 
    659472       ld (editBtm),hl 
    660        set 2,(iy+0Ch) 
    661473       ld a,' ' 
    662474       ld (curUnder),a 
     475       set curAble,(iy+curFlags) 
    663476       set apdAble,(iy+apdFlags) 
    664477       set apdRunning,(iy+apdFlags) 
    665 $$:    ld hl,6 
     478$$:    B_CALL getKey 
     479       ld hl,6 
    666480       ld (curRow),hl 
    667        ei 
    668        B_CALL getKey 
    669        or a 
    670        jr z,$B 
    671481       call DispHexA 
    672482       cp 37h 
     
    682492       DB "This is a test!",0 
    683493 
    684 BCALL: 
    685        push hl 
    686        push hl 
    687        push hl 
    688        push af 
    689        push bc 
    690        push de 
    691        push hl 
    692        ld hl,15 
    693        add hl,sp 
    694        ld d,(hl) 
    695        dec hl 
    696        ld e,(hl) 
    697        inc de 
    698        inc de 
    699        ld (hl),e 
    700        inc hl 
    701        ld (hl),d 
    702        in a,(6) 
    703        ld c,a 
    704        dec hl 
    705        dec hl 
    706        dec hl 
    707        ld (hl),a 
    708        dec hl 
    709        ;HACK: until I can figure out how to shift bits of addresses in ZDS... 
    710        ld (hl),0 
    711        dec hl 
    712        ld (hl),75h 
    713        dec de 
    714        ex de,hl 
    715        ld d,(hl) 
    716        dec hl 
    717        ld e,(hl) 
    718        ld b,0 
    719        bit 7,d 
    720        jr nz,bootCodeCall 
    721        bit 6,d 
    722        jr z,multipageAppCall 
    723        res 6,d 
    724        ld a,7Dh 
    725        jr $F 
    726 bootCodeCall: 
    727        res 7,d 
    728        ld a,7Fh 
    729        jr $F 
    730 multipageAppCall: 
    731        call getBasePage 
    732 $$:    call outputPage 
    733        ld hl,4000h 
    734        add hl,de 
    735        ld e,l 
    736        ld d,h 
    737        ld hl,8 
    738        add hl,sp 
    739        ld a,(de) 
    740        ld (hl),a 
    741        inc de 
    742        inc hl 
    743        ld a,(de) 
    744        ld (hl),a 
    745        inc de 
    746        ld a,b 
    747        or a 
    748        jr z,$F 
    749        ld a,(de) 
    750        neg 
    751        add a,b 
    752        jr BCALL_done 
    753 $$:    ld a,(de) 
    754        or a 
    755        jr nz,BCALL_done 
    756        ld a,c 
    757 BCALL_done: 
    758        call outputPage 
    759        pop hl 
    760        pop de 
    761        pop bc 
    762        pop af 
    763        ret 
    764 getBasePage: 
    765        ;TODO: come back to this... 
    766        ret 
    767         
    768 BJUMP: 
    769        ex (sp),hl 
    770        push af 
    771        push bc 
    772        push de 
    773        in a,(6) 
    774        ld c,a 
    775        ld e,(hl) 
    776        inc hl 
    777        ld d,(hl) 
    778        ld b,0 
    779        bit 7,d 
    780        jr nz,bootCodeJump 
    781        bit 6,d 
    782        jr z,multipageAppJump 
    783        res 6,d 
    784        ld a,7Dh 
    785        jr $F 
    786 bootCodeJump: 
    787        res 7,d 
    788        ld a,7Fh 
    789        jr $F 
    790 multipageAppJump: 
    791        call getBasePage 
    792 $$:    call outputPage 
    793        ld hl,4000h 
    794        add hl,de 
    795        ld e,(hl) 
    796        inc hl 
    797        ld d,(hl) 
    798        inc hl 
    799        ld a,b 
    800        or a 
    801        ld a,(hl) 
    802        jr z,$F 
    803        neg 
    804 $$:    add a,b 
    805        jr nz,$F 
    806        ld a,c 
    807 $$:    call outputPage 
    808        ex de,hl 
    809        pop de 
    810        pop bc 
    811        pop af 
    812        ex (sp),hl 
    813        ret 
    814  
    815 JErrorNo: 
    816        ;TODO: come back to this 
    817        ret 
    818  
    819 HandleLinkKeyActivity: 
    820        nop 
    821        nop 
    822        di 
    823        push af 
    824        call NZIf83Plus 
    825        jr nz,eiHaltRet 
    826        in a,(9) 
    827        and 0D9h 
    828        jr z,$F 
    829        bit 6,a 
    830        call nz,setBit7IYPlus3Dh 
    831        pop af 
    832        ei 
    833        ret 
    834 $$:    ld a,(9C86h) 
    835        or a 
    836        jr nz,$F 
    837 eiHaltRet: 
    838        pop af 
    839        ei 
    840        halt 
    841        ret 
    842 $$:    pop af 
    843        ei 
    844        ret 
    845 setBit7IYPlus3Dh: 
    846        set 7,(iy+3Dh) 
    847        ret 
    848  
  • trunk/page00/jumptable.asm

    r2 r9  
    44 include "includes\os2.inc" 
    55 
    6  PUBLIC _OutputProtectedPort 
     6 PUBLIC _OutputProtectedPort,Page0Call 
    77 EXTERN OutputProtectedPort 
    88 
  • trunk/page00/util.asm

    r8 r9  
    22 SEGMENT PAGE00 
    33 
    4  PUBLIC PutS,PutC,ifastcopy,CallUSBActivityHook 
     4 PUBLIC PutS,PutC,ifastcopy,CallUSBActivityHook,CheckLowBatteriesTurnOff,_ZERO_PORT_3,_OUT_PORT_3 
    55 PUBLIC _APP_PUSH_ERRORH,_APP_POP_ERRORH,FindSym,PushRealO1,Mov9ToOP1,FPAdd,OP1ToOP2,LCDDelay 
    66 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 
    1011 
    1112 include "includes\os2.inc" 
     
    2526Placeholder005Fh: 
    2627       ret 
     28 
     29HandleLinkKeyActivity: 
     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 
     44eiHaltRet: 
     45       pop af 
     46       ei 
     47       halt 
     48       ret 
     49$$:    pop af 
     50       ei 
     51       ret 
     52setLinkAssistError: 
     53       set linkAssistError,(iy+linkAssistStatusFlags) 
     54       ret 
     55 
     56BCALL: 
     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 
     98bootCodeCall: 
     99       res 7,d 
     100       ld a,7Fh 
     101       jr $F 
     102multipageAppCall: 
     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 
     129BCALL_done: 
     130       call outputPage 
     131       pop hl 
     132       pop de 
     133       pop bc 
     134       pop af 
     135       ret 
     136getBasePage: 
     137       ;TODO: come back to this... 
     138       ret 
     139        
     140BJUMP: 
     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 
     158bootCodeJump: 
     159       res 7,d 
     160       ld a,7Fh 
     161       jr $F 
     162multipageAppJump: 
     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 
     187JErrorNo: 
     188       ;TODO: come back to this 
     189       ret 
     190        
     191ReadKeyboardKey: 
     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 
     226rkk1:  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 
     234setKbdKey: 
     235       ld (843Fh),a 
     236       set 3,(iy+0) 
     237       or a 
     238       ret z 
     239       ld (8445h),a 
     240       ret 
     241ReadKeypad: 
     242       sub a 
     243       call ReadPort1 
     244       xor 0FFh 
     245       ret z 
     246       ld hl,0 
     247       ld c,0FEh 
     248       ld d,1 
     249rk1:   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 
     265rk3:   ld e,0 
     266       ld b,8 
     267rk2:   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 
     293scfRet:scf 
     294       ret 
     295ReadPort1: 
     296       push af 
     297       in a,(2) 
     298       and 80h 
     299       jr nz,rp1SE 
     300rp1_1: pop af 
     301       out (1),a 
     302rp1_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 
     312rp1SE: 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 
     322PowerOff: 
     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 
     339GetCSC:ld hl,843Fh 
     340       di 
     341       ld a,(hl) 
     342       ld (hl),0 
     343       res 3,(iy+0) 
     344       ei 
     345       ret 
     346 
     347UpdateAPD: 
     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 
     366RunLinkActivityHook: 
     367       push af 
     368       ld hl,LinkActivityHookBlock 
     369       call GetHookByte 
     370       jr z,RunHook 
     371       pop af 
     372       res LinkActivityHookEnabled,(iy+33h) 
     373       ret 
     374RunHook: 
     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 
     396RunHookSafeRet: 
     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 
     410RunHookRet: 
     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 
     435GetHookByte: 
     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 
     455ZIfSlowSpeed: 
     456       jr z,ForceSlowSpeed 
     457SetFastSpeed: 
     458       push af 
     459       call NZIf83Plus 
     460       jr nz,$F 
     461       ld a,1 
     462       out (20h),a 
     463$$:    pop af 
     464       ret 
     465ForceSlowSpeed: 
     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 
     488CheckLowBatteriesTurnOff: 
     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 
     524SaveOScreen: 
     525;Save LCD contents to saveSScreen from APD power-off 
     526;TODO: come back to this 
     527       ret 
     528 
     529AnimateRunIndicator: 
     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 
    27556 
    28557CallUSBActivityHook: 
  • trunk/page01/01base.asm

    r3 r9  
    1111       call DisplayShift 
    1212       call GetCSC 
    13        bit 4,(iy+09h) 
     13       bit onInterrupt,(iy+onFlags) 
     14       res onInterrupt,(iy+onFlags) 
    1415       jr z,$F 
    1516       xor a 
  • trunk/page02/02base.asm

    r8 r9  
    33 
    44 PUBLIC HandleUSBInterruptInitialize,HandleDefaultUSBInterrupt,ReadUSBInterruptData 
     5 PUBLIC HandleUSBACablePluggedIn,HandleUSBACableUnplugged,HandleUSBBCablePluggedIn,HandleUSBBCableUnplugged 
    56 
    67;TODO: deal with all these USB events, somehow 
     8HandleUSBACablePluggedIn: 
     9HandleUSBACableUnplugged: 
     10HandleUSBBCablePluggedIn: 
     11HandleUSBBCableUnplugged: 
    712HandleUSBInterruptInitialize: 
    813HandleDefaultUSBInterrupt: 
Note: See TracChangeset for help on using the changeset viewer.