;OS-sending code include "settings.inc" include "ti83plus.inc" include "equates.inc" SEGMENT Main GLOBALS ON EXTERN StartApp,PutSApp,DispHexA,DispHexHL SendOS: B_CALL ClrLCDFull B_CALL HomeUp ld hl,sSendOSWarning call PutSApp sendOSKeyLoop: B_CALL GetKey cp kQuit jr z,StartApp cp kClear jr z,StartApp cp kMode jr z,StartApp cp kEnter jr nz,sendOSKeyLoop xor a ld (iy+1Bh),a ld (header),a ld (header+2),a ld (header+3),a ld a,68h ld (header+1),a B_CALL Send4Bytes B_CALL Get4BytesNC ;send OS header ; jr send83PlusOS ld a,07h ld (header),a ld a,6 ld (header+1),a ld a,0Ah ld (header+2),a xor a ld (header+3),a ld hl,appData ld (iMathPtr5),hl ld (hl),0 inc hl ld (hl),1 inc hl ld (hl),23h inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld (hl),80h inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld (hl),0 B_CALL SendPacket B_CALL Get4BytesNC call mySendAck ld hl,appData ld bc,256 B_CALL MemClear ld hl,my73OSHeader ld de,appData ld bc,my73OSHeaderEnd-my73OSHeader ldir ld a,15h ld bc,256 ld hl,appData call mySendPacket ld hl,pageTable83P in a,(2) and 80h jr z,$F ld hl,pageTable84P in a,(21h) and 3 jr z,$F ld hl,pageTableSE $$: ld a,(hl) cp 0FFh jr z,$F inc hl push hl ld (appInfo),a ld hl,4000h ld (iMathPtr5),hl sendPageLoop: ld hl,(iMathPtr5) bit 7,h jr nz,quitThisPage ld hl,appData ld (hl),0 inc hl ld (hl),01h inc hl ld (hl),23h inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld de,(iMathPtr5) ld (hl),e inc hl ld (hl),d inc hl ld a,(appInfo) ld (hl),a inc hl ld (hl),0 ld a,06h ld bc,10 ld hl,appData call mySendPacket B_CALL Get4BytesNC call mySendAck ld a,(appInfo) ld hl,(iMathPtr5) ld de,7 ld (curRow),de call DispHexA call DispHexHL ld de,appData ld bc,256 B_CALL FlashToRam ld a,(appInfo) or a jr nz,no5ACheck ld hl,(iMathPtr5) ld de,4000h sbc hl,de jr nz,no5ACheck ld a,0FFh ld (appData+56h),a no5ACheck: ld hl,(iMathPtr5) ld bc,256 add hl,bc ld (iMathPtr5),hl ld hl,appData ld a,15h ld bc,256 call mySendPacket jr sendPageLoop quitThisPage: pop hl jr $B $$: ld hl,appData ; ld (hl),0 ; inc hl ; ld (hl),1 ; inc hl ; ld (hl),23h ; inc hl ; ld (hl),0 ; inc hl ; ld (hl),0 ; inc hl ; ld (hl),0 ; inc hl ; ld (hl),0FFh ; inc hl ; ld (hl),07Fh ; inc hl ; ld (hl),0FFh ; inc hl ; ld (hl),0 ; ld hl,appData ; ld bc,10 ; ld a,06h ; call mySendPacket xor a ld de,4000h ld (iMathPtr5),de ld (appInfo),a ld a,80h call sendHeaderPacket B_CALL Get4BytesNC call mySendAck ; ld hl,appData ; ld bc,256 ; ld a,15h ; call mySendPacket ; xor a ; ld de,4000h ; ld (iMathPtr5),de ; ld (appInfo),a ; call sendHeaderPacket ; B_CALL Get4BytesNC ; call mySendAck ld a,1Ah ld (appInfo),a ld a,80h ld bc,256 ld de,4000h ld (iMathPtr5),a call sendHeaderPacket B_CALL Get4BytesNC ld hl,ramCode ld (hl),02h inc hl ld (hl),0Dh inc hl ex de,hl ld hl,ValidationData ld bc,254 ldir ld hl,appData ld a,15h ld bc,256 call mySendPacket ld a,07h ld (header),a ld a,92h ld (header+1),a B_CALL Send4Bytes B_CALL ClrLCDFull B_CALL HomeUp ld hl,sPullBattery call PutSApp ; ld h,92h ; B_CALL Send4BytePacket B_CALL Get4BytesNC ld a,Lconvert B_CALL PutC res indicOnly,(iy+indicFlags) B_CALL GetKey jr StartApp sPullBattery: DB "Pull battery now!!!",0 mySendAck: ld a,07h ld (header),a ld a,56h ld (header+1),a B_CALL Send4Bytes ret sendHeaderPacket: ld hl,appData ld (hl),0 inc hl ld (hl),01h inc hl ld (hl),23h inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld (hl),a inc hl ld de,(iMathPtr5) ld (hl),e inc hl ld (hl),d inc hl ld a,(appInfo) ld (hl),a inc hl ld (hl),0 ld a,06h ld bc,10 ld hl,appData ;falls through to mySendPacket mySendPacket: ld (header+1),a ld a,07h ld (header),a ld a,c ld (header+2),a ld a,b ld (header+3),a push bc push hl B_CALL Send4Bytes pop hl pop bc ld de,0 ld (header+4),de $$: push bc ld c,(hl) B_CALL SendDataByte inc hl pop bc dec bc ld a,b or c jr nz,$B ld a,(header+4) B_CALL SendAByte ld a,(header+5) B_CALL SendAByte B_CALL Get4BytesNC ret send83PlusOS: ld bc,256 ld (ioData),bc ld a,23h ld (867Fh),a ld a,80h ld (8682h),a ld hl,4000h ld (8683h),hl ld a,1Ah ld (8685h),a ld a,6 ld hl,ioData ld de,10 B_CALL SendRAMCmd B_CALL Get4BytesNC B_CALL SendAck ld hl,appData ld bc,256 B_CALL MemClear ld hl,myOSHeader ld de,appData ld bc,myOSHeaderEnd-myOSHeader ldir ld hl,appData ld (iMathPtr5),hl ld a,23h ;73h ld (header),a ld a,15h ld (header+1),a xor a ld (header+2),a inc a ld (header+3),a B_CALL SendPacket ld hl,pageTable83P in a,(2) and 80h jr z,$F ld hl,pageTable84P in a,(21h) and 3 jr z,$F ld hl,pageTableSE $$: ld a,(hl) inc hl cp 0FFh jr z,$F ld de,7 ld (curRow),de call DispHexA B_CALL SendOSPage jr $B $$: ld hl,appData ld (hl),57h inc hl ld (hl),0 inc hl ld (hl),23h inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld (hl),0 inc hl ld (hl),0FFh inc hl ld (hl),07Fh inc hl ld (hl),0FFh inc hl ld (hl),0 ld hl,appData ld bc,10 ld a,06h call mySendPacket B_CALL Get4BytesNC call mySendAck ld a,0FFh ld hl,7FFFh ld de,appData ld bc,57h B_CALL FlashToRam ld hl,appData ld a,15h ld bc,57h call mySendPacket ld hl,sendOSDone call APP_PUSH_ERRORH B_CALL SendOSValidationData call APP_POP_ERRORH sendOSDone: res indicOnly,(iy+indicFlags) B_CALL GetKey jr StartApp sSendOSWarning: DB "!!!!WARNING!!!!!" DB " " DB "Make sure the " DB "other calculator" DB "can accept this " DB "operating system" DB "and press ENTER.",0 pageTable83P: DB 00h,01h,02h,03h,04h,05h,06h,07h,18h,19h,1Ah,1Bh,1Ch,1Dh,0FFh pageTable84P: DB 00h,01h,02h,03h,04h,05h,06h,07h,34h,35h,36h,37h,38h,39h,3Ah,3Bh,3Ch,3Dh,0FFh pageTableSE: DB 00h,01h,02h,03h,04h,05h,06h,07h,74h,75h,76h,77h,78h,78h,7Ah,7Bh,7Ch,7Dh,0FFh myOSHeader: DB 80h,0Fh,00h,00h,00h,00h,80h,11h,04h,80h,21h,01h,80h,31h,10h,80h,0A1h,01h,80h,7Fh myOSHeaderEnd: my73OSHeader: DB 80h,0Fh,00h,03h,80h,1Ch,80h,11h,02h,80h,21h,01h,80h,31h,3Ch,80h,0A0h,80h,7Fh,00h,03h,80h my73OSHeaderEnd: my83PHeader: DB 80h,0Fh,00h,00h,00h,00h,80h,11h,0Ah,80h,21h,02h,80h,31h,29h,80h,0A1h,03h,80h,81h,12h,80h,7Fh my83PHeaderEnd: ValidationData: DB 40h,4Ch,46h,69h,12h,68h,0B9h,5Dh,9Eh,0CBh,25h,0EDh,34h,6Ah,20h,0C8h,51h,0DCh,59h,0C0h,0E9h,01h,75h,71h,4Dh,0FBh,0A1h,48h DB 2Fh,17h,5Ah,87h,85h,3Eh,0EEh,0E0h,87h,0FFh,31h,0ACh,0B2h,42h,14h,0E4h,68h,0FEh,83h,70h,0FEh,91h,0A0h,0BFh,0F9h,58h,0CEh,69h DB 21h,0BCh,3Bh,1Bh,0Ah,4Dh,62h,0FAh,0C8h,0FFh,80h,00h,80h,00h,80h,00h,80h,00h,80h,00h,80h,00h,0FFh,0FFh,80h,00h,80h,00h DB 80h,00h,0FFh,0FFh,80h,00h,80h,00h,80h,00h,80h,00h,80h,00h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,00h,00h,00h,00h,00h,00h,00h,00h DB 00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,0FCh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,80h,11h,0Ah,04h,1Fh,0Ch,7Ch,38h,67h,90h,92h,82h,44h,73h,90h,52h,82h,82h,00h,00h DB 00h,00h,92h,0FFh