›; ************************************›; *MODIFICATION OF ATARI 800XL OS-ROM*›; * FORA FUNCTION SIMILAR TO THE *›; *'HEBREW.SYS' UTILITY *›; ************************************››; DONE BY: JIRI BERNASEK (BEWESOFT)›; 14.01.2001››; THIS SOURCE CREATES NEWROM-IMAGE›; AT $4000-$7FFF››; NEEDS ROM800XL.DAT, HBRWSYS.FNT››; WHEN ASSEMBLED, RUN AT $0600 TO›; UPDATEROM-CHECKSUMS BEFORE SAVING›››; ----------- CHANGES -------------››; CTRL+INVERSE = HEBREWMODE ON/OFF›; (ALSO CHANGES FONTS)›;(RESET CHANGES TO OFF)››;SH+CTRL+INVERSE = SWAP FONTS (ANYTIME)››; SHIFT+RESET = COLD START››; -------------››; CTRL+F4, 1200XL LEDS - REMOVED››; WARNING BELL - MIDDLE OF 3RD LINE››; CTRL+;/ CTRL+. CHARACTERS EXCHANGED››; INTERNATIONAL FONTS REPLACED››; "BOOT ERROR" MESSAGE CHANGED TO "ERR"››; ONLY 2POWER-UP BYTES CHECKED›››; ------ ONLY IN HEBREW MODE ------››; LO-CASE CAPS - HEBREW RIGHT-TO-LEFT›; (ALSO SPACE, DEL, CTRL+;)›;- SHIFT: NORMAL LATIN›;- CONTROL: NORMAL GRAPHICS››; HI-CASE CAPS - NORMAL LATIN›; - CTRL: NORMAL GRAPHICS›; - SHIFT: HEBREWLEFT-TO-RIGHT››; CONTROL CAPS - HEBREW LEFT-TO-RIGHT›; - CTRL: NORMAL GRAPHICS›; - SHIFT: NORMAL LATIN››; SH+CTRL+INSERT = INSERTMODE ON/OFF››; INSERT MODE - HEBREW›; - SHIFT: LATIN›; - CONTROL:GRAPHICS›; (CAPSINDEPENDENT, ALLRIGHT-TO-LEFT›; INSERTING - ALSO LATIN/SPECIALS)››; -------------››; IN LO-CASEOR INSERT MODE, FUNCTION›; OF DELETE KEY IS DIFFERENT (CTRL+DEL›; -INSERT MODE; LEFT-TO-RIGHT DELETING)››; DEFAULT FONTS WHILE CHANGING GRAPHICS›; MODE DEPEND ON HEBREW MODE ON/OFF›; ($CC WHEN ON)››; KEYBOARD-TO-ATASCII ASSIGNMENT IS›; TABLE-CONVERTED FOR HEBREW CHARS.››; -------------››; OUTSIDE OFTHE "E:"DITOR (IN THE "K:"›; HANDLER), ALL THE MODESARE VALID,›; BUT ONLY FOR CHARACTERS-ASSIGNMENT›; (NO RIGHT-TO-LEFT WRITING ETC.);›; SCREEN-OUTPUT THROUGH CIO ISN'T›; CHANGED.››; THE FLAG OF EXTRA MODESIS:›; HBRFLG = $33F 0 - HEBREW OFF›; $80 - HEBREW ON›; $C0 - +INSERT MODE››››;*************************************›; ORIGINAL 800XL ROM AS BACKGROUND›;*************************************››.OR$4000›.BID:ROM800XL.DAT››;*************************************›; THE CHANGES›;*************************************››; *** HEBREWFONT INSTEADOF ***›; *** INTERNATIONAL ***››.OR$4C00›.BID:HBRWSYS.FNT›››; *** RE-WRITTEN (SHORTER) KEY-IRQ, ***›; *** MOVED DLI, NEW ROUTINES IN ***›; *** SAVED PLACE ***››.OR$FC19›.MC$7C19››;NEW KEY-IRQ(NO 1200XL LED INDICATORS)››KEYIRQTXA›PHA››LDA$D209›CMP$2F2›BNE?L1›LDX$2F1›BNE?L5››?L1CMP#$83;LOCK KEYBD.›BNE?L2›LDA$26D›EOR#$FF›STA$26D›BCS?EXIT1››?L2LDX$26D›BNE?EXIT2››TAX›CMP#$9F;CTRL+1›BNE?L3›LDA$2FF›EOR#$FF›STA$2FF›BCS?EXIT1››?L3AND#$3F›CMP#$11;HELP›BNE?L6›STX$2DC›BEQ?EXIT1››?L4STX$2FC›STX$2F2››?EXIT1LDA#3›STA$2F1›STA$4D››?L5LDA$2D9›STA$22B››LDA$22F;DMACTL ON›BNE?EXIT2›LDA$2DD›?L5BSTA$22F››?EXIT2PLA›TAX›PLA›RTI››?L6CPX#$E7 ;SH+CTRL+INVERSE›BEQ?L7›TXA›EOR#$84;CTRL+F2›BNE?L4››LDX$22F;DMACTL OFF›BEQ?EXIT2›STX$2DD›BNE?L5B››?L7LDA$2F4;SWAP FONTS›LDX$26B›STA$26B›STX$2F4›BCS?EXIT1›››; MOVED DLI ROUTINE››FINEDLIPHA›LDA$2C6›EOR$4F›AND$4E›STA$D40A›STA$D017›PLA›RTI›››;*** SWITCHING MODES (PART OF GET "K:")››SWITCHESTAY›LDA$33F;HBRFLG››CPY#$F7 ;SH+CTRL+INSERT›BNE?L1›EOR#$40 ;INSERTMODE ON/OFF›STA$33F››?L1CPY#$A7;CTRL+INVERSE›BNE?L2›AND#$80 ;INSERTMODE OFF›EOR#$80 ;HEBREWMODE ON/OFF›STA$33F›JSRSETCHBAS ;SWITCH FONT››?L2CPY#$C0 ;A PARTOF ORIG.PRG.›RTS›››;*** TEST FOR LOWER CASE/NO SHIFT, CTRL››TESTLDA$2FB ;CHARACTER ATASCII›CMP#$61›BCC?NO›CMP#$7B›BCS?NO››LDX$7C ;KEY-CODE›CPX#$40››.BY$24 ;SKIP NEXT INSTRUCTION›?NOSEC›RTS›››;*** RELATEDCHANGES IN ORIG. CODE››; NO KEY-REPEAT FOR SH+CTRL+INVERSE›; (INSTEAD OF CTRL+F4)››.OR$C1DB›.MC$41DB›CMP#$E7›››; ADDRESS OF(MOVED) DLI››.OR$EFD0›.MC$6FD0››LDA#FINEDLI›››; A PARTOF GET"K:" ROUTINE››.OR$F314›.MC$7314››LDX#$FF ;NO KEY›STX$2FC››LDX$2DB ;KEYCLICK›BNE?JUMP›JSR$F983››?JUMPSTA$7C›KCNEWJSRSWITCHES;NEW MODES!›››; *** NEW CODE IN ORIGINALY ***›; *** FREE SPACE ***››.OR$CB65›.MC$4B65›››;*** CURSOR-RETURN IN EDITOR FOR›; RIGHT-TO-LEFT WRITING››SETMARGBIT$3E8 ;SUPERFLAG›BPL?L1 ;RIGHT-TO-LEFT?››LDA$53 ;R. MARGIN (NOT LEFT)››?L1STA$55›RTS›››;*** NEWDELETE-BACKSPACEROUTINE››CTRLDELJMP$F4D5 ;INS.MODE->CTRL+DEL›ORIGDBSJMP$F450 ;ORIGINAL ROUTINE››DELETEBIT$3E8 ;SUPERFLAG›BVSCTRLDEL ;INSERT MODE›BPLORIGDBS ;NO HEBREW››JSR$F411 ;CURSOR RIGHT›LDA$55›CMP$52 ;=LEFT MARGIN (OVER)?›BNE?ERASE››CMP$63 ;FIRSTPHYS. LINE?›BNE?L1›JMP$F400 ;YES->LEFT(BACK)››?L1JSR$F923 ;DEL.LINE IF EMPTY›JMP$F468 ;UP+ERASE CHARACTER››?ERASEJMP$F46F ;ERASECHARACTER›››;*** KEYBOARD-CONVERSION TABLE››TABLE.BY"sypabwkriogljvnmtzxc"›.BY$60›.BY"eduqhf"›››;*** GET"K:" CONTINUED - HEBREW MODE››KCONTSTA$3E8 ;SUPERFLAG=INSERT/0›BNE?L4 ;INSERTMODE->HEBREW››LDA$2FB ;ATASCII CHAR›DEY›BMI?L4 ;CONTROL LOCK->HEBREW›BEQ?L2 ;NO CAPS->R.-TO-L.HBR.››CMP#$60 ;CAPSLOCK:›BEQ?L5 ;THIS ALLWAYS CONVERT›CMP#$5B ;UPPER CASE?›BCS?L1›CMP#$41›BCC?L1›BIT$7C ;WITH SHIFT?›BVS?L5 ;YES->CONVERT HEBREW››?L1JMPKCNORM ;->STANDARD FUNCT.››?L2CMP#$20 ;LO-CASE CAPS›BEQ?L3 ;SPACE?›CMP#$7E ;DEL-BKSP.?›BEQ?L3›JSRTESTPLU ;OR HEBREW CHAR.?›BCS?EXIT››?L3SEC ;YES->RIGHT-TO-LEFT›ROR$3E8 ;SUPERFLAG=128››?L4JSRTESTPLU ;HEBREW CHAR.?›BCS?EXIT›› ;A=ATASCII CHAR.›?L5AND#$1F›TAX›LDATABLE,X›STA$2FB››?EXITJMPKCVALID›››;*** MOVED "CIO NOT OPEN" DUMMY-ROUTINE››CIONOTLDY#$85›RTS›››;*** ADDTO PUT"S:" ENTRY POINT››PUTSLDX#0 ;NO RIGHT-TO-LEFT!›STX$3E8 ;SUPERFLAG›JMP$F1A4 ;ORIGINAL ROUTINE››; *** RELATED CHANGES IN ORIG. CODE››; GET"K:" CAPS LOCKS››.OR$F3B4›.MC$73B4››LDY$2BE ;CAPS LOCKS›LDA$33F ;HBRFLG›BMIKCHBR››KCNORMJSRTEST ; NORMAL MODE!›BCSKCVALID ;NO LO-CASE››TYA ;CAPS LOCKS›BEQKCVALID›ORA$7C ;ADDTO KEY-CODE›JMPKCNEW ;RE-PROCESS›››KCHBRINY ; HEBREW MODE!›AND#64 ;INSERT MODE FLAG›JMPKCONT ;CONTINUE ROUTINE...›››KCVALIDJSR$F93C ;(ALREADY IN ROM)››; KEY DEFINITION TABLE CHANGES››.OR$FBF8›.MC$7BF8›.BY$80 ;CTRL+INV.->NOTHING››.OR$FBD3›.MC$7BD3›.BY$60 ;EXCHANGE CTRL+;›.OR$FBF3 ; AND CTRL+.›.MC$7BF3›.BY$7B›››; ADD TOCURSOR-RETURN ROUTINE››.OR$F9A3›.MC$79A3›JMPSETMARG›››; CHANGEIN EXTEND-LOG.-LINE ROUTINE››.OR$F514›.MC$7514››; (UNNECESSARY JSR $F5AC REMOVED)›JSR$F78E ;INSERT LINE›JSR$F7E2 ;CLEAR LINE›JSR$F997 ;TO LEFT/RIGHT MARG.›››; DELETE-BACKSPACE ROUTINE ADDRESS››.OR$FB20›.MC$7B20›.WODELETE›››; NEW PUT"S:" ADDRESS››.OR$E416›.MC$6416›.WOPUTS-1›››; ADDRESS OFMOVED "CIO NOT OPEN"››.OR$E58C›.MC$658C›LDA#>CIONOT-1›STA$27›LDA#R.MARGIN›MORIGJMP$F60E ;MOVE CURSOR/ADD LINE›››PLACEPHP ;(AFTER BIT SUPERFLAG)››BVC?L1 ;INSERT MODE?›JSR$F49F ;CTRL+INSERT›?L1JSR$F1CA ;PLACECHARACTER››PLP›BVS?L2 ;INSERT MODE->END›BPLMORIG ;STANDARD MODE?››LDA$55 ;RIGHT-TO-LEFT!›CMP$52›BEQMMARG ;LEFT MARGIN?››DEC$55 ;MOVELEFT›DEC$63››?L2RTS››;*** RE-WRITTEN CIO-INIT (SHORTER)››CIOINITLDX#$00››?L1LDA#$FF›STA$340,X›LDA#CIONOT-1›STA$347,X››TXA›CLC›ADC#$10›TAX›BPL?L1››RTS›››;*** RELATEDCHANGES IN ORIGINAL CODE››; ADDRESS OFNEW CIO-INIT››.OR$E46E›.MC$646E›JMPCIOINIT›››; ADD TOGET"S:" ENTRY POINT››.OR$F180›.MC$7180›JSRCLRSUPER›››; ADD TOPLACE-CHARACTER ROUTINE››.OR$F1C1›.MC$71C1›BIT$3E8 ;SUPERFLAG›JSRPLACE ;PUT CHAR./MOVE CURS.›››; *** SHORTENED "BOOT ERROR" ***›; *** MESSAGE & NEW ROUTINE ***››.OR$C43D›.MC$443D››TEXT.BY"ERR",$9B ;BOOT ERROR›››;*** TEST FOR HEBREW CHAR.››TESTPLULDA$2FB›CMP#$60;$60?›BEQ$C42C ;CLC RTS›JMPTEST;OR LO-CASE?›››;*** CORRECTION OF "E:" ADDRESS›; (NOW POINTING TO THE"ERR" TEXT)››.OR$C3E3›.MC$43E3››LDA#TEXT›››; *** CHANGED ROM-CHECKSUM ROUTINES ***›; *** (SHORTER), AND A NEW ROUTINE ***››.OR$FF73›.MC$7F73›››;*** CHANGEDROUTINES››CHECK1LDY#0›STY$8B›STY$8C››?L1JSRGETCHECK›CPY#$0C›BNE?L1››LDA$C000›LDX$C001››CHECKXCMP$8B›BNE?BAD›CPX$8C›BNE?BAD›CLC›RTS››?BADSEC›RTS›››CHECK2LDY#0›STY$8B›STY$8C››LDY#$0C›JSRGETCHECK›JSRGETCHECK››LDA$FFF8›LDX$FFF9›BCSCHECKX ;ALLWAYS›››GETCHECKLDX#0›?L1LDACHTAB,Y›STA$9E,X›INY›INX›CPX#4›BNE?L1››LDX#0››?L2CLC›LDA($9E,X)›ADC$8B›STA$8B›BCC?L3›INC$8C››?L3INC$9E›BNE?L4›INC$9F››?L4LDA$9E›CMP$A0›BNE?L2›LDA$9F›CMP$A1›BNE?L2››RTS›››CHTAB.WO$C002,$D000›.WO$5000,$5800›.WO$D800,$E000›.WO$E000,$FFF8›.WO$FFFA,$0000›››;*** SETFONTS DEPENDING ON HEBREW MODE››SETCHBASLDA#$E0 ;STANDARD FONT›LDX#$CC ;HEBREWFONT››BIT$33F ;HBRFLG›BPL?L1›TXA ;EXCHANGE›LDX#$E0››?L1JMPSTCBCNT ;->CONTINUE›››;*** REST OFTHIS ROUTINE+ CONNECTION›; INTO ORIGINAL CODE›››.OR$EFA0›.MC$6FA0››;MODIFIED ORIGINAL CODE››BCCNGRCONT›LDA#$91›JMP$F154››;END OF ABOVE ROUTINE››STCBCNTSTA$2F4›STX$26B›RTS››;HEBREW-MODEDEPENDENT DEFAULT FONT›;WHILE CHANGING GRAPHICS-MODE››NGRCONTJSRSETCHBAS›››; *** OTHER SMALL CHANGESIN THE ***›; *** ORIGINAL CODE ***›››;*** CORRECTION OF ORIGINAL SUPERFLAG›; USE- FOR COMPATIBILITY WITH NEW›; BITS››.OR$F2DA›.MC$72DA››LDA$3E8 ;SUPERFLAG›LSR›BCC?SKIP ;ONLYBIT0››TXA ;SPECIAL F1-F4›CLC ;FUNCTIONS OFFSET›ADC#$2D›TAX››?SKIPLDA$FB0E,X ;ROUTINE ADDRESS›STA$64›LDA$FB0F,X›››;*** BELL (WHILE TYPING) TO MIDDLE OF›; THIRD LINE››.OR$F270›.MC$7270›CMP#$64›››;*** SHIFT+RESET CHECK (+MAKING THE›; ADDRESSFOR NEW HBRFLG FREE)››.OR$C2C1›.MC$42C1››LDA$D20F ;SKSTAT›AND#8 ;SHIFT KEY›BNE$C290 ;NO SHIFT->WARMSTART›››;*** HEBREW MODE DEFAULT:OFF!›; AFTER RESET››.OR$C367›.MC$4367›LDA#0 ;0=OFF 128=ON› ;192=ON+INSERT MODE››;*** ROMVERSION NUMBER››.OR$C002›.MC$4002››.BY$01,$14,$01,0 ;14.1.2001›.BY"HB" ;HEBREW›.BY0,0,1,1 ;VER. 1 REV. 1›››; ************************************›; *UPDATE ROM-CHECKSUMS *›; ************************************››.OR$600››NEWCHECKLDA#0 ;BOTHCHECKSUMS›STA$4000 ;=0 (WILL BE ALSO›STA$4001 ;ADDED TO NEW SUM)›STA$7FF8›STA$7FF9››LDA#$40 ;ADDRESS HI-BYTE›STANEWCH2A+2››JSRNEWCH2›STA$4000›STX$4001››JSRNEWCH2›STA$7FF8›STX$7FF9››BRK ;END!››; CALCULATE CHECKSUM OF $2000 BYTES››NEWCH2LDA#0›TAX›STANEWCH2A+1 ;LO-BYTE ADDRESS›LDY#$20 ;HI-BYTE LENGTH››NEWCH3CLC›NEWCH2AADC$FFFF ;SELF MODIFYING!!!›BCC?HI›INX››?HIINCNEWCH2A+1›BNENEWCH3›INCNEWCH2A+2›DEY›BNENEWCH3››RTS›››; ************************************›; * T H E E N D *›; ************************************››