diff --git a/roms/f256jr/README.md b/roms/f256jr/README.md index 878b3e2..d202538 100644 --- a/roms/f256jr/README.md +++ b/roms/f256jr/README.md @@ -5,7 +5,7 @@ This directory contains BIN files for programming the F256JRe flash memory with ## How to Install Currently, the toolbox must be installed by bulk programming the flash memory. -Using the FoenixMgr Python script, this can be done with the following command (substitute the device path or name for your F256K's USB debug port): +Using the FoenixMgr Python script, this can be done with the following command (substitute the device path or name for your F256JR's USB debug port): ``` python FoenixMgr.zip --port {debug device name} --flash-bulk toolbox.csv diff --git a/roms/f256jr2/README.md b/roms/f256jr2/README.md new file mode 100644 index 0000000..577a1ce --- /dev/null +++ b/roms/f256jr2/README.md @@ -0,0 +1,12 @@ +# ROM Files for the F256JR2e + +This directory contains BIN files for programming the F256JR2e flash memory with the Foenix Toolbox. + +## How to Install + +Currently, the toolbox must be installed by bulk programming the flash memory. +Using the FoenixMgr Python script, this can be done with the following command (substitute the device path or name for your F256JR2's USB debug port): + +``` +python FoenixMgr.zip --port {debug device name} --flash-bulk toolbox.csv +``` diff --git a/roms/f256jr2/toolbox-20.bin b/roms/f256jr2/toolbox-20.bin new file mode 100644 index 0000000..cc82fc8 Binary files /dev/null and b/roms/f256jr2/toolbox-20.bin differ diff --git a/roms/f256jr2/toolbox-21.bin b/roms/f256jr2/toolbox-21.bin new file mode 100644 index 0000000..cb25f66 Binary files /dev/null and b/roms/f256jr2/toolbox-21.bin differ diff --git a/roms/f256jr2/toolbox-22.bin b/roms/f256jr2/toolbox-22.bin new file mode 100644 index 0000000..ba71233 Binary files /dev/null and b/roms/f256jr2/toolbox-22.bin differ diff --git a/roms/f256jr2/toolbox-23.bin b/roms/f256jr2/toolbox-23.bin new file mode 100644 index 0000000..0d306be Binary files /dev/null and b/roms/f256jr2/toolbox-23.bin differ diff --git a/roms/f256jr2/toolbox-24.bin b/roms/f256jr2/toolbox-24.bin new file mode 100644 index 0000000..fc39365 Binary files /dev/null and b/roms/f256jr2/toolbox-24.bin differ diff --git a/roms/f256jr2/toolbox-25.bin b/roms/f256jr2/toolbox-25.bin new file mode 100644 index 0000000..7f11031 Binary files /dev/null and b/roms/f256jr2/toolbox-25.bin differ diff --git a/roms/f256jr2/toolbox-26.bin b/roms/f256jr2/toolbox-26.bin new file mode 100644 index 0000000..b8e0aa4 Binary files /dev/null and b/roms/f256jr2/toolbox-26.bin differ diff --git a/roms/f256jr2/toolbox-27.bin b/roms/f256jr2/toolbox-27.bin new file mode 100644 index 0000000..3bc2dd0 Binary files /dev/null and b/roms/f256jr2/toolbox-27.bin differ diff --git a/roms/f256jr2/toolbox-28.bin b/roms/f256jr2/toolbox-28.bin new file mode 100644 index 0000000..bee9b55 Binary files /dev/null and b/roms/f256jr2/toolbox-28.bin differ diff --git a/roms/f256jr2/toolbox-29.bin b/roms/f256jr2/toolbox-29.bin new file mode 100644 index 0000000..572ab41 Binary files /dev/null and b/roms/f256jr2/toolbox-29.bin differ diff --git a/roms/f256jr2/toolbox-2A.bin b/roms/f256jr2/toolbox-2A.bin new file mode 100644 index 0000000..48a9e2f Binary files /dev/null and b/roms/f256jr2/toolbox-2A.bin differ diff --git a/roms/f256jr2/toolbox-2B.bin b/roms/f256jr2/toolbox-2B.bin new file mode 100644 index 0000000..5a5741d Binary files /dev/null and b/roms/f256jr2/toolbox-2B.bin differ diff --git a/roms/f256jr2/toolbox-2C.bin b/roms/f256jr2/toolbox-2C.bin new file mode 100644 index 0000000..daeadc5 Binary files /dev/null and b/roms/f256jr2/toolbox-2C.bin differ diff --git a/roms/f256jr2/toolbox-2D.bin b/roms/f256jr2/toolbox-2D.bin new file mode 100644 index 0000000..7626e12 Binary files /dev/null and b/roms/f256jr2/toolbox-2D.bin differ diff --git a/roms/f256jr2/toolbox-2E.bin b/roms/f256jr2/toolbox-2E.bin new file mode 100644 index 0000000..17033af Binary files /dev/null and b/roms/f256jr2/toolbox-2E.bin differ diff --git a/roms/f256jr2/toolbox-2F.bin b/roms/f256jr2/toolbox-2F.bin new file mode 100644 index 0000000..b0bce4a Binary files /dev/null and b/roms/f256jr2/toolbox-2F.bin differ diff --git a/roms/f256jr2/toolbox-30.bin b/roms/f256jr2/toolbox-30.bin new file mode 100644 index 0000000..6928dd6 Binary files /dev/null and b/roms/f256jr2/toolbox-30.bin differ diff --git a/roms/f256jr2/toolbox-3F.bin b/roms/f256jr2/toolbox-3F.bin new file mode 100644 index 0000000..927a942 Binary files /dev/null and b/roms/f256jr2/toolbox-3F.bin differ diff --git a/roms/f256jr2/toolbox.bin b/roms/f256jr2/toolbox.bin new file mode 100644 index 0000000..6c62598 --- /dev/null +++ b/roms/f256jr2/toolbox.bin @@ -0,0 +1,2137 @@ + +9;<=>?@AB /,123456ABCDOK.*111213141517181920212324303132OVsd0sd1 RAMROM%d:38668K86088K960ARMELFM32PGXPGZPPCRCESPUODDSD0SD1INFNaNNone %s +%02XGenXEVID/sd0FILEFR20MIPSNONEPGXRH32S370S390V800COM1COM2EVENMARK%s%s +%04X:%d:%sIAMCUPPC64SPARCSPACE%02X %s%08XC256 UF256 PGenX32M68020M68030M68040(null)dev = PARISCVPP500SCREEN+,;=[]%s%s%s +%s: %s +%024lX:A2560 KA2560 MA2560 XC256 U+F256 JRF256 K2F256 KeF256JR2M68040VUNKNOWNi486DX4*float*CONSOLE%s: #%d +no mediaA2560 U+C256 FMXF256 JReF256 K2cM680EC30M68EC020M68EC040ReservedWDC65816rtc_init*:<>|"?FAT32 Sector: +not foundCartridge!!n!+! _C' !lll llDDDC&CA2560 K40A2560 K60M68SEC000chan_openChannel: PSG Muted.bad handlei486DX2 50i486DX2 60fchan_readfile lockedCPU %s +Model %s +A2560X - LBA2560X - PBGenX32 - LBGenX32 - PBchan_free: MIPS_RS3_LESPARC32PLUSfsys_mkfs: MSDOS5.0bad argumentExternal SDCInternal SDCprint(%d,..)fchan_read_b access deniedgeneral errorinvalid drivemedia changednot supportedout of boundsout of memoryunknown errorproc_exit: %dA2560X - CUBEGenX32 - CUBEchan_read: %s~ojaX?UT~TxT?U~T?U@ file not foundinvalid objectout of handlesMemory %d KB +proc_set_shellchan_alloc(%d)chan_close(%d)chan_alloc: %dloader found: bad binary filenot enough coreproc_get_resultflush error: %dFATFS Error: %dfsys_setlabel: device not ready/sd0/fnxboot.pgx/sd0/fnxboot.pgz/sd1/fnxboot.pgx/sd1/fnxboot.pgzBooting from %s +Clock %lu MHz +0123456789ABCDEFF256 K2eReservedcdev_init_systemcdev_register %sbad device numberinvalid path nameprohibited accessunknown file typeF%d-%s +proc_exec stack: proc_exec start: kYG5#ل+.,;=[]/*:<>|\"?rh^TJ@6,CODEC initialized.Console installed.Interrupts enabledTimers initializedTop of memory: %lxbad channel numberCommand not found.Mounting drive #%dfsys_mkdir error: directory not foundfile system timeoutoperation timed outtoo many open fileschan_read(%d,%p,%d)chan_seek error: %dFile system error: fchan_write error: fsys_delete error: fsys_load_ext ext: fsys_open error: %d m +I FUJ=0'0NO NAME FAT NO NAME FAT32 Keyboard initializedlow level disk errorno file system foundchan_get_records 1: chan_get_records 2: chan_write error: %dchan_write(%d,%p,%x)fsys_set_cwd error: SDC driver installed.Foenix Retro Systems +chan_status error: %dCould not load file: Could not open file: uart_open: Bad parityW0 |_?Indicators initializedInterrupts initializedfile is not executableToolbox v%d.%02d.%04d +Couldn't load file: %dchan_write_b error: %dvolume has no work areaFPGA %04X %04X.%04X +h T#E+:-+0XoypuxPGZ 24-bit count: %06lxPGZ 32-bit count: %08lxSetting default loader.uart_open: no BPS token{{{{{ {File system initialized.Text system initialized.drive is write protected +Select a boot source: + +Default boot source: %s +Error while printing: %dCouldn't get channel: %dReached end of PGZ file.fsys_open out of handlesCould not find screen %duart_open: Bad stop bitscould not write to devicedevice is write protectedCouldn't execute file: %dPGZ 24-bit address: %06lxPGZ 32-bit address: %08lxfsys_open out of channelsBlock device system ready.could not read from deviceBooting: /sd0/fnxboot.pgx +Booting: /sd0/fnxboot.pgz +Booting: /sd1/fnxboot.pgx +Booting: /sd1/fnxboot.pgz +Returning a bad extension.uart_open: no parity tokenn"lp$ߌXYwӞChannel device system ready.FAILED: Console installationfile system assertion failedproc_exit: Attempting rebootuart_open: no stop bit tokenfile system invalid parameterCould not mount device %d: %dfsys_mount called f_mount: %dInitializing the text system...FOENIX DEBUG OUTPUT------------creation of file system aborteddevice could not be initializedNo bootable device is present. +PGZ 24-bit start address: %06lxPGZ 32-bit start address: %08lxuart_open: Bad data word lengthuart_open: no data length tokenScanning for bootable devices... +FAILED: SDC driver installation %dFAILED: file system initializationtxt_get_device: number mismatch %dxxxxxpxZxDx.xA valid boot record was not found. + AAA 22222 55555 6 00000 X XA A 2 5 6 0 0 X X A A 2 5 6 6 0 0 X X A A 22222 55555 66666 00000 X XAAAAA 22222 55555 66666 0 0 X z1m1a1U1I1=1 11@%11111111 1@112`2T2H2<202 $2@2 2 PC: %08X Address: %08X +Press SPACE for default. +Could not load /sd0/fnxboot.pgx: %d +Could not load /sd0/fnxboot.pgz: %d +Could not load /sd1/fnxboot.pgx: %d +Could not load /sd1/fnxboot.pgz: %d + _________ ___________ __ __ / ____/__ \ / ____/ ___/ / / / / / / __/ //___ \/ __ \ / / / / / /___ / __/____/ / /_/ / / /_/ / \____//____/_____/\____/ \____/ PC: %08X proc_exit: Attempting to call into shell      _________ ___________ __ __ / ____/__ \ / ____/ ___/ / / / / __ / / __/ //___ \/ __ \ / / / /_/ /_/ /___ / __/____/ / /_/ / / /_/ /_ __/\____//____/_____/\____/ \____/ /_/ Unable to mount drive %s, FatFS Error: %d ___ ___ ___________ ____ __ __ / | |__ \ / ____/ ___// __ \ / //_/ / /| | __/ //___ \/ __ \/ / / / / ,< / ___ |/ __/____/ / /_/ / /_/ / / /| | /_/ |_/____/_____/\____/\____/ /_/ |_| i9i;~i<yi=ti>oi?ji@ei;ci=ai?_i ___ ___ ___________ ____ __ __ / | |__ \ / ____/ ___// __ \ / / / / / /| | __/ //___ \/ __ \/ / / / / / / / / ___ |/ __/____/ / /_/ / /_/ / / /_/ / /_/ |_/____/_____/\____/\____/ \____/ Address Error Bus Error Division by Zero Error Illegal Instruction Error Oh dear, something has gone wrong... Overflow Exception Privilege Exception Range Check Exception Spurious Interrupt Unknown Exception Ŀ + Foenix Toolbox v%d.%02d.%04d starting up... ___ ___ ___________ ____ __ __ / | |__ \ / ____/ ___// __ \ / / / / __ / /| | __/ //___ \/ __ \/ / / / / / / /_/ /_ / ___ |/ __/____/ / /_/ / /_/ / / /_/ /_ __//_/ |_/____/_____/\____/\____/ \____/ /_/ +EXbcdefoskuxh _________ ___________ ________ ____ __ / ____/__ \ / ____/ ___/ / ____/ |/ / |/ / / / __/ //___ \/ __ \ / /_ / /|_/ /| / / /___ / __/____/ / /_/ / / __/ / / / // | \____//____/_____/\____/ /_/ /_/ /_//_/|_| }kYG5#م ƅ +[!] Incompatible CPU arch: expected %s, but found %s + !#*-<n>[@H[5]"{|} GGGGGG EEEEEEE NN NN XX XXX 3333333 2222222 GG EE NNN NN XX XXX 33 22 GG GGGG EEEEE NN NN NN XXX 33333 22222 GG GG EE NN NNN XXX XX 33 22 GGGGGG EEEEEEE NN NN XXX XX 3333333 2222222 ,mf` _X%MKB7,!@fAB~CDGɓJfKfPohHXm&EAAEEEIIIOOUUYAIOUPDJ +}c,Z 0@QYR[T]V_`pN!2!p!!!$0,/`,g,u,,d-&A (((( AAAAAABBBBBB #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %ax029J.yMC= (": e,;;=f,?@AAF +S@UXZ\]^_abdefgjb,lmnpqstvwxyz{|d,~DE{ +0 P`"6Da&C?=;<XDB@>)8*,.- 9/!10#"2$ 3% +45&' ( :6+ORSPLMHEWNA\^[[]lmficbejkhgd`l@N# +bz@c`[WOؓhG'${jJ۝uW~:g5^-Q'E1ڨˆyk\Q?I9?05(~#swVlN^EP;6*ԁO)шwWހM&Լd`ˀM&{ky\i@MrrAB++$% +~ +oS ծe̜JËB|8h/Ui3uW93+$wvX;5-%O(oM&|lQeCp"WQJC 6cnHUyALm7@].4N#'>uuuaaaBBB!!!žx}`znTdZEOG782&1234567890-= qwertyuiop[] asdfghjkl;'`\zxcvbnm,./* -5+/ !@#$%^&*()_+ QWERTYUIOP{} +ASDFGHJKL:"~|ZXCVBNM<>? -5+/ 123457890=   + + ;"`\ ,. -5+/ !@#$%^&*()_+   + + ;"`\ ,. -5+/ 1234567890-= QWERTYUIOP[] ASDFGHJKL;'`\ZXCVBNM,./ 789-456+1230./ !@#$%^&*()_+ qwertyuiop{} +asdfghjkl:"zxcvbnm<>? 789-456+1230./ 12356~`|\-= qwertyuiop[] asdfghjkl;'zxcvbnm,./* -5+/ ;Kc{;Kc{;Kc{;Kc{;Kc{dIdIdIdIdIdIdIdIddIdIdIdIdIdIdIdIddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd~~~~l|88||888T|8|8|<<$BB$۽?0($$( <$<$$T((T 08<80  < 8||8HHHHHH>JJ: + + + $$8~~8||88TT8 @@ @@|$BB$8||8(((((|(|((P(8DDD8(8DDD8 8DDD8(HHH4 HHH4(DDL48(8DDDD8(DDDD88TPT8$ x "|DD(||8D@D8$ p 8DDD8HHHHp4X|(D(|8DD|DD88DDD((l< DDD8ll$JR"\@<@8@<8DDDDDD|||||  8 8 `| T T(P 8$$$8 <<<<< +  !kkkk::kkkkkkkkkkkkkkk?k"Yk"{kOkkkk k)k +Pk +Ok"rk"rk? )k"k)"k)"k kkkc8k k +k k%'kik"2"KH"hk +kk)!8kH"hkH"uhkik + kki-k +H :Hkwwk:k)k)k[?]?k i +k +"k +"k +kH"ohkkkk  k" Y" b)k +wk:00k'' ɀ k:k 8k )"Ykk )"Ykk ) "Ykk )"Ykk )"Ykk )"Ykk )"Ykk )"Ykk )"Ykk )"Ykk )D"Ykk )"Ykk  8 k [𫫘 H (+k [𫫯]?[?+k>"Hnk [ h )X+k [ h )x+k)kk8[dH"U?Z"\: czkZ"Z\:czk)8kZ$"d8ezkZ"{m:zk8PI"'Ykk"k"e"S""[k  " " )kZ)))zkwk    k) + + + +#e + k"s"N[+"kHHHH">hhhhk  :i:<i<k +7k"k)k)kZ   ;"6zk"|0Hzzkk [𫫩"6Y?+kZZ  " YH"ahzzk:   / k +   "kHHFf ee&hk!#%'k [ D J B "+k/ + JJJJ / +  k~"]:~"kZ8PIzk"n + + +H +H"ZhhY?"]z +zk [𫫘"B+k)  +  k"[   k"[  J kZ) :8zk"[  k:% +   k   "֍d"֍k kZ  HH )H )"hhhh"czk88(PI + +[H[kn> n> + +p>r>n>n>kk +"Hn "Hnk"[Y"pkco??"6k# k +  +"S + + + + "S z z +zk"6"t}  )   k"[  J:kkdHHJee&hzk)8PI&"d4ekZ  )  zk!ɀ8 +ek [𫫘8[?[?]?]?]?[?+kZZ JJJJ JzzkZZ;"W  zzkZ   +)HHHHH )"2;i +"czkZ   +)HHHHH )";i +"czk + +8PI"mz +zk + +8PI"z +zk + +8PI"z +zkHZ H $  + +()h  zhhhk + +"}z +zk   ):kH +&H) +H)*EJ&h)jh)jhkZ"["    zk>""8S?kk + +8PI "Ÿz +zkZ  O )8 +"^ J ) "^zk"^*"^#"^,"^"^"^E"^"hkZ  8     գI)8zk"Ϥ !  k + [𫫘 +m"6U? +W?+z +zkZZc( +" +"d8 + + + +zzkH)ɀ))ɀ)zh @zzkhk +"v"NPHP +Nh"Zz +zk +   +  ) zz z +zk [𫫩 އ    +kZ  ) + + +$ +e) + + +e"ozk +ZZ +; +"ۺ zzz +zk +Z"[ + +!"tH"hh  zz +zk +Z +d"֍ ' ; +"+zz +zk:0 +H`&{k + +;iHH +>>"%hhz +zk + +) +H"ah H"ahz +zkH"ahH + )+' + ) + + h((kZ  i  "+ H"hzzk +  + )"\: zz z +zk +i +)"Y)  z +zk +  + H +"Hn zz z +zk + [𫫘ZZ +)  H"hzz+z +zk +ZZZ +: +  ݦzzzz +zkZ8PI0zk + + +$ +e"Hn"jZ"[18 PI"e  zzk [𫫘ZZ"Y"Y ` )%zz+k +) +H"ah +ک H"ah +H"ahz +zk + Z +:Ȉ + ަzzz z +zk + [𫫘"v":< H< +:h"Z+z +zkuCYȗȗȗȗ:ȗ  k + [𫫘 + +"d   +"P:"[+z +zk +  "d % + + + + + % zz z +zk;8J  ;"m;";" ;iJk"Y"6"v?=""!Z\} [𫫘Z ' )4"dl%e"1k ' z+kZ  QQ UU QQ U* QQ UU zk + [𫫘"v +  + +"Z+z +zk + [𫫘"v# +"Z+z +zk + [𫫘"v& H +h"Z+z +zk + [𫫘"v&>@ H@ +>h"Z+z +zk + [𫫘"v&BD  D +B"Z+z +zk~"N[z"N[ y w`"0hh"kZ8PI08$"d8!8$"dezk + [𫫘"v$ H +h"Z+z +zkZZ"[4   ))   7 zzkZ    =) + + +?$ +  # +  ) + + + $ + "jzk +   + )"]H)"]h8 ) Պzz z +zk +Z )"[  w"[  zz +zkL?!?3???6?>>?>>?>>CO?Q?k [𫫘Z""w "}"[z+kZ8PI9V"d>eHl"6hzk +  "v&JL HL +Jh"Zzz z +zkZ     J  jj) ec  :  ȈǣzkZZ   JJJJ ))#) 8PI0 8PI0 +"dczzkX7 X^ CYȗȗȗȗkZZ:2      zzzk + [𫫘"v* HHH +h"Zhh+z +zk + [𫫘"v*68H H8 +6h"Zh+z +zkZZ8PI0zzk8PI0Ӣ"pZ  QQ  QQ    :zkZZ  "e7  ;iH;i":hh +"[zzk + [𫫘"v( H +h"Z+z +zk + [𫫘"v(&(  ( +&"Z+z +zk + [𫫘"v(*,  , +*"Z+z +zk +Z"v  +"ZH "6hzz +zkZZ "Ϥ yy I /yy  Oyy zzk + ["޲4"r"r"{i +"{ +PI0+z +zkH) H +)87IJj(hk( +*(zzk + [𫫘 + +"d +">hh"[+z +zk + [𫫘"v*24 H H4 +2h"Zh+z +zk +ZZO?Q?Q? +O?"Zn>:"`Yzzz +zk + +r> +p>"Z:Ӌ [𫫘ZZZ"Y"Y'  l    l zzz+k [𫫘ZZZ"Y"Y'  `    ` zzz+kZ"eC  )zk:,:#!#%'!# %'kZZZ  o!o#"dc @ +` ";zzzk +;8 +;"wHH +;i";_hh;iz +zk;8T?8PI0:HHHb;i "hhh;i"6;iTk;8 +#JJJJ  #   ;i";i +k +;8 +;"?pHH +;i";_hh;iz +zk +ZZ8PI6""d<e + +"Zzzz +zk +;8 +;"?p;iH +;i";_hh;iz +zk +"7h> +> +:?">^!?">^?">^z +zk"'Y +;8  i "1e  i "1e;i k;8T?8PI0>HHHH2;i " hhhh;i"6;iTk + ZZ + +  "2  w S?zzzz z +zkZ8PI0zk""d<<""de [𫫘ZZZ"Y"Y.' l I%   l zzz+k + [𫫘Z + +"d +"]"}"[z+z +zk + [𫫘Z + +"d +"~4"}"[z+z +zk + Z  +  "[ +  ::zzz z +zk + + ?  2)(d",hhz +zk +Z +H*"h +"]H +HH"8hhhک "6hzz +zk + Z + + +"] e  + ) zzz z +zk  +  [𫫘"v .. 0 "0 +. "Z+zz z +zk +  [𫫘"v .R T "T +R "Z+zz z +zk +ZZ +" Y"rd: " Y"^b:zzz +zk +ZZZ + +"S"/;i +"ۺ zzzz +zk +;8J +;"m)  ;";" ;iJz +zkZ    N#) + + +$ +e  !) + + +$ +e ' "jzk + + +"]:<w + +eɀz +zkZ    P') "d e  %) "d e ' zkZRMH)h8PI0 "'e zzkZZZ  " )"Ϥ@"v{"v{  "v{) +& +"zzzk;8T?8PI0FZHZHHHHH;i" ;i ;i"6;iTk +ZZ + +"^:<w + +eɀzzz +zk +  [𫫘"v 0" $ $H$ +" h"Z+zz z +zk + ZZ    +   "[: +:оzzzz z +zk +Z +0B;H +i":hhzz +zk + [𫫘ZZ8PI2""d<e +"Zzz+z +zkZi  8PI0  zzke  Z    NH$ +) + + +ehH$ +) + + +eh"jzzk +ZZ +%;i +"+ zzz +zkd"Z: +Z +"֍  ; +"+ +": +"kzz +zkZ&"t}   )  6HH"0hh    "zkZV            I%  zkZ    PH ) "dehH ) "deh +zzk + [𫫘ZZ8PI6""d<e +"Zzz+z +zk +8ʆ8ʆ + +$2 +0 +d"`eHe +hz +zk [ Y )d Z )Ȉ +& [ )+k +ZZ8PIG6"d;e% +"Zzzz +zkZ   0 P9  E a 0f  % A F  )i)i )80zk +ZZ +"eC;iH +":hh "}"[zzz +zk;8 + ?"}-"}Y?HH  "mahh;i +k + Z "e + +< + "5 "])"[zzz z +zk P X Y Z [ ] ^ _ X \ X k +ZZ +7"6 +"e/;H;i"Vhh) +"[zzz +zk + [𫫘Z" ^ +)&"d4e"Ɔ +"^g d% z+z +zk + Z  +0 2  "  + "zzz z +zk +ZZZ +8PI + ;iH"shhH:H"9shhzzzz +zk + ZZZ  +8PI0zzzzz z +zk " Y +cH"ah8PI0/8PI0    .      "k + [𫫘 +HH"hh8PI+ +6"d;e6"o+z +zk +ZZ\ + +C7 +"7h0 +zzz +zk +ZZZ +8PI + ;iH"shh8HH"9shhzzzz +zk +ZZZ +8PI + ;iH"shhcHH"9shhzzzz +zk +ZZZ +8PI + ;iH"shh8HH"9shhzzzz +zk +ZZZ +8PI + ;iH"shhcHH"9shhzzzz +zkOy.wy aw~y)))"ډ$~y))) "ډk +ZZ"dP8,"% + + + + + ) )JJJJI)8 zzz +zk + ;8R ?8PI0B;i^H ;i"1hh;i? +?"Z;iRzz z +zk +ZZZZ + + +"]e) +     zzzzz +zk + ZZ  "m0< "y_0* "oY%zzzz z +zkZZ8PI*8PI Ȉ :H:H"9shhzzk [𫫘;8R[Hک>;i "hhh;i"m"}"[;iR+k +Z +8 +PI0@ "d  4 + "de"i: zz +zk + [𫫘ZZZZ;i;"P:;$ +"Zzzzz+z +zk + ZZZ + 8PI c   zzzzz z +zk +"l + Z + ("}H H",hhh8PI  e ӊzzz z +zkZ  ) + + + +) + +   +) + +e) + +e  zzk + [𫫘ZZ8PII""d<e%HH +h"Zhzz+z +zk + ;8R ?8PI0B;i^H ;i"1hh;i? +?"Z;iRzz z +zkZZZ  )"Ϥ"v{2"v{%"v{"v{  "v{) +$ +"zzzk +ZZZ +   +;"%8PI2 +'7) +"zzzz +zk + ZZ  +h"6 "e*;iH +"Vhh +"[zzzz z +zkZi:] +H`"/[M"/[D? ' 0 @ ! '   zk + Z!ɀJ=ɵ6% + + e 8 ֊i)zz z +zk + [𫫘ZZ8PIN""d<e*HH +h"Zhzz+z +zk + [𫫘ZZ8PIN""d<e*HH +h"Zhzz+z +zk +  +   +L       "oȷ   "Hn i + zz z +zk + Z  + + "@ +:)0 +i2 0 ",+hzzz z +zk;88PI0! ;i";ik%ک8;ie  FfFfFfFfZ  )az8 ʆɀ8)zk [𫫘ZH"6hY?U?W?:"6dW?U?"mahh"jP"6"jz+k;8 +cJ iH + +he +  ;i +k:  ;8 +JJJJ))  ))  JJJJ)  )  ;i";i +k + ZZ + 8PI0 +"%zzzz z +zk8PIH ch  [𫫘;8RZ;i"h +;i"hh"}"[;iR+kZZZZ  8'PI0zzzzko#"d8%PI0 !ce @  +`  +Z +"ef +"d"[W% +eHeh"d"[+ eHe +h"d"[zz +zk + ZZZZ  +8PI0zzzzzz z +zk " Y" bH +c h  +ZZZ ++   zzzz +zk +cH"h + Z + + i  )     "Y    @' ) +"l)zzz z +zkZZZi0  :  ;8"d'e"H"6h)H;iH"6hhh"[zzzk +  [𫫘ZZZZ;i;"P:G0H   + h"Zzzzz+zz z +zk +ZZZZ + +i"^  7i +"^Hhzzzzz +zk + Z  + "7O +)  + $ + zzz z +zk + [𫫘ZZZZ +QQ"޲Q +G +="r +  "{i +"{ +PI0zzzz+z +zk;8 8 PIx;i H"s;iH"|z c c 8;i H"z d8"v;iH!"z;i;ik + Z  +H "]h+ "]e  zzz z +zk c)"]H +ch  +;8: +;i;i"{:O;i"-+1  + +;i"B;i:z +zk +;8T +>8PI/"2cH +HH;i " hhhh&ڥ +HH=;i "hhh;iH"hh;iTz +zk [𫫘ZZZ;H"ZhhhhF&HH",hh1HI "6hH +"6hzzz+k + [𫫘;8 +;i;"P >&("( +&"Z H2 +"6h ;i ++z +zk + [𫫘;8 +;i;"P >*,", +*"Z H"6h ;i ++z +zk + +  +ȈFj +  +ȈFj +  +ȈFj +  z +zk + Z + 4  6 +g "vO + i8 ")fh +4 +6 zzz z +zkZZZ -8%PI008'PI08'"j':o!o#zzzk [𫫯PL|P"y:#"y:4"y: PV"YQQ ɿ 4QQ    P"YP+k + [𫫘;8 +H"h;i;i"P:B "  +"Z"^g;i ++z +zk + [𫫘;8 +;i;"P B"$&H $ +"h"Z H "6h ;i ++z +zkZs8 PI0_ h i j l m n ` a b zzk + +eL޴ + ZZZZ  +8PIV " Y" b   + 5 + +c  zzzzzz z +zk/):{):n): ): ): $): / k +)Ȉ +&)d + +Ȉ +&)d + +Ȉ +&)dz +zk + S?L~ f8ʆ +8ʊ +"ݙz +zk + Z + + i e )8PIF cH"h c   zzz z +zk;8 8PI0Lo;iH"shh;iH"|zhh8PI +cc8  ;iH"zhhd "v;iH"zhh;ik8HHH +**** * * * 8Hh hhhzzz****Jh;i(khhhhhzzzz(k + ZZ +."G  v 8PI0\    +)"]H +ch c  zzzz z +zk + Z  +  W  N  )<   !  "YJ    zzz z +zk + ZZZ + %;i +"+ S 4  +"+;i +"+zzzzz z +zkd"Z:L + ZZ + )"Z::   "Z:S))e:"be  zzzz z +zkZ?8PI@8PI0PG"x8 A"x:P8PI0"PG"c A"zk +  [𫫘;8 +;i;"P K.0/H  0 +. h"Z H"6h ;i ++zz z +zk +  [𫫘;8 +;i;"P N243HH  4 +2 h"Zh H"6h ;i ++zz z +zkZ"8PI0T8PI0zk$"d88$"de6"d;;6"deL>;86 \  t[<!"`#%+-/1f')35;"$:#;"$;i6k + ZZZ +##"Z" [ʆ"]" [ʆ"] 8PI00c +7cWc  +    +"ZЁzzz\;8 / ;i"B;i"BH;i"]h;ik;ic   A +Z  )"]H;ich  + ZZ   +  +":L  ; +" [  +"; +"+; +"+#  zzzz z +zk/)$"L+&"c@+&"3@+&"k +;8 cJ + +cic + +   Ȁ ;iz +zk:L;8"         h ,WYw]8!;"*:"  ;"*;i"k + Z + V + 0 E X + x $ȷ )"o:  E% 0 6 X + x ! 8PI08PI0 zzz z +zk +Z8PI0L ǣ$"d8e +r +8PI/ +6"d;eE "} "}zz +zk + Z   +     LǠ)L  w   +) e    @ Z   a "z   +"@  H"hzz z +zk + Zi + +) +eHeh) 8g +ȗ +i8 8ʠȗ +Hȷ +h"z\( + Z  +"e + + +c i +c + + +c i +  c   +' ȷ ϥ +ȗȗȗȗ ȗ +ȗzzz z +zk;8  + ;"W Lʣ + + + + + 4  +   +  + + +   ;i +;i"{;ikZ A"SPG""PG"c A"?"*Sń'7"*"PG"x8 A"x:zk +  [𫫘;8 + +H +HHH "6hhhh;i;i"PJ  . +H  + h"ZH "6h;i ++zz z +zk +ZZ +)LQ64 +i8"[fhLL  84(H6*h "H  ;4 wH6"wh +i8"[fhzzz +zk;8;"8 +) + + + + +ʪʠ Ȉ +& ʠȈ +& ʆFj;ik;8 c  g       )   ;ik ҋ [𫫘8PI0L И""d<e + +  +kZ 9 LЯʆʆ"ʆʆ"  s  i ) +ʆʆ" ) +ʆʆ"8 8 zk + ZZZ + ; +"ۺLѥ  +"Kt +"?e A  +"B +"~U zzzzz z +zkIIڅd*8&zzkHCh"H"Ik$8$8 + +ddd d & +&&8& & zz +z zkEH"7z8kk;8  LӯPHP h 8PI0j ) + +  +  + ' + ) + +e  % + ) + +e  4e  e  L;izkZZZZX + + + + +c  :Lzԣ +H`HHB "hhnHH> "hhRHH. "hh6HH: "hhHH6 "hhH "uh)":"zzzzk +;8 +   + +  + "Lՠ +ic  8<PI0S;iH +i ":hh  ;i +z +zk;8VV) Y Ѓƒ^!#%b79E`;=`')w~+-`/1_35;?A>[CE~GIjKMOQbSU;"0;iVk;8 +;H"zd""=HHH";i dd">d"I" 8PI0""m"9shh;i +kHH "hhdd ":d "  ZZH|"h0V8PII$"d88$"de$"d8ew8PI0Y$"d8J$"d88$"de$"d8ezzk + ZZZ  +   , .7  . , "K t +  "I      "~Uzzzzz z +zk + ;8 +  + +"v:LYڥ + " 46 +i8"Hn +i8 +6H c "[fh c  + ;i +zz z +zk + ZZZ  +  "KLC۩ +  "j    ) " "~ULڣ zzzzz z +zkZZZ: +8PI0.80PI0/"YPI0 +80Ldܩ$8PILW܊80PI09"YPI080^8aPI0V"YPI0i28API06"YPI0izzzk +  [𫫘;8 + +H +HHH"hhhh;i;i"Pq HH"6hh . +H   + h"ZH "6h;i ++zz z +zk +;8   + 8PIL~ޣ"d 8PI0L~ޣ8 :8PI0m + "8 PI02 c + +QQ " +H "4h  H "4h H "4h:L;i z +zk +  [𫫘ZZZ""}8PI0Lߣ6"d;eLߣ"~ n ` + E H  + +h")g"Z  zzz+zz z +zk [𫫘Z8PI0 +z+zke  ie  ie  ie  ie  ie  ie  L;8@;i ;i"{:L ;i "-_7  ;/+)  "تH h 7  + +  :  ;i@k + ;8 +  +  "Z"Hn ) + " +;i +zz z +zk: + + +c + + +c i +cH"Zchȗ + + +c : + + +c i +cH"Zchȗ L + ZZZZ    L) + +)o +Ho" +h8PIL$ +) + + +e  ) + + +?$ +  # + + + + +  # + + +  ) + + + $ + "j4e + e   Lzzzzz z +zk + ZZZZ)* +  ϧ) L)*  ϧ) +!   +zzzzzz z +zk + ;8$8PI0L8PI0L$"d8e +$"d8e    +i;i "o i +i "o;i i "o;i$zz z +zk + [𫫘;8;i# + ' L>;i4"dl%e" "[LA   8PIL;ic +i c   +i c);i+z +zk + [𫫘;8;i# + ' La;i4"dl%e" "[Ld   8PIL;ic +i c   +i c);i+z +zk + [𫫘;8 + +"d8PI ' L  ' L)B;i"ah;i4"dl%e" * +4"dl%e" H"6h"[  ' ;i+z +zkL +  [𫫘;8! +QQ +  "޲L +L#eHe +h + L8#PIcHcheHe +h + "r  +  "{i "{ PI0L.;i+zz z +zkH + )&" + ) + )0 8 + +hk ڥH + )2. + )! +8  +ж0 8 +𚰥hkH88HdR8W)) +*)(j)J(j zzkJjfȀ( +  [𫫘ZZZ"v LF H L )"ϤL;iH"shhH"9shhL;iH"shhHJJJI)8 + + +H"9shht;iH"shh8PI=H:H"9shh HH F  +h"ZH:H"9shhHH +F h"Zzzz+zz z +zkZZZZP8<8;H"z +"1l?H?H"1l?H?H"1l??"]H~"1l?H?hZJJJJH^"1l;i?H?H?HB "1l?H?H?H +"1l ;i H"z"9s;izzzzk@"j"gH̢:dFfc c  e + * &ؘ8ce~hhhhhh/FffF8&/y$0&&ddZddQH)hF8&H)h)H)h) +J Jȥ +Z먊JjzkZZZZL   +"LL)#cL~ +uH`8`f8P\cR8H80>8 48*8)88 +e  +eLzzzzk + ;8 +  + +i"^:L'): "d  1@')" ɀL + e j +D)e"^; ɀ9    +e';i +zz z +zk  L* +;8;i H"shh;iH"|zhhLQL( c ;iH"z H">j;iH"z;i +L( c  ;iH"z H">j;iH"z;i +L c c8  ;iH"z H">j;iH"z;i +;iz +zk + ;8 + +:  8PI0L(;iH;i "Vhh ] ) E      +E Lr  +;izz z +zk +;8 + +"'L_Ln  : + +;i e / + + +;i e"';iz +zk +iH + + + +he"ĶH + +;i ehL + [𫫘;8 + +      JJ +              #   "wd"d "we "w"w# "w0   "w"w +;i ++z z +zk +;8 + + + LJ;i;i"{L3  +"-L+ 0G7)+ "ت + ,  +"K  ;i +z +zkZ"]:"L"!aL):L))  )  <)H"  hL )H"  hL@)H"  hL)H"  hm?)H"  hC)H"  h')H"  h "!aLzk"j"kI"j"k"gHhڥ +E\8~FfjJ8 +Fl$ zzzku +**Ji +Jȣ +fjhhzkFeeJjj8j +ЧгH +JhȈkЗF@ + ZZ  L=7 L=  L@    L2  L8  L8"\ȷ   + + "  L@ +e8  +Ш    5  ȷ +  +ȗ  :"\zzzz z +zk + ;8   +       +i"1e ): "d)  +e +D)e"1e    L + e : +  @    ;i zz z +zk + ZZZZ + :8PI0L +"%L8PI0L) c q +W = c  c ] c ] c J8PI": c Lzzzzzz z +zkO0 ? +ZZZZ +  L;i"7m"Y - "Y +  "Y  "Y   +"Y": - N"S?D +.8"S?    +%  "AZ  "AZzzzzz +zk +@ +ZhhJjhzkک"j"gHҘ8i0 +*$ &$8 &ccd&8&&&8j$Ff19Ffj  +,&JȀJ dd +ZhhhhJjzzk + ;8  + +i"^:L?'): "d  4@')$  +e:LL +D)e"^ ] ɀQ   "  +e"  , + ;izz z +zk  L;8:5 GY ԋYृ%!E#%l')/1KY35%^+-079;i"$:Ld GY ԋYृ%!E#%l')/1KY35%^+-079;i"$"hhh;i:k +;8;i H"shh;iH"|zhhL?L H">jhL ;iH"z H">j c  ;i H"z H">j;iH"z;iL c c8  ;iH"z H">j c  8:;i H"z H">j;iH"z;i;iz +zk + ZZZZ=L87g0f +g +  ȷ   ȷ g7 +80] +"6Zȷ"6Zȷg7H h"zzzzzz z +zk + ;8  + "* 7)Lz 7)$ + Ȉ +& +8 PI0     ".)_ +  + ":i:У    ". "k;i zz z +zk +ZZ + +"vL +  L +  L + +i8"Hn +i6U"1e +i8RRaA" +irrAa" +i " +i$"&$4664 +i8"[fh  H"chzzz +zk + ;8 =LJ c)   "e + + +ci +e + + ȷ + +LJ +ȷȷ8 Y +g  +c    7 H  h" +i;i zz z +zk + [𫫘ZZZ +8 +PI0L~  "d  L  "d  8PI0L 8PI` +c   A)"]H "dech  "dezzz+z +zk "dec L L  + ZZZZ  + L' L'& +"zL* "yb L"E L* %L* +"zp8ʆ'   L[zzzzzz z +zk +  [𫫘ZZZ + +"d8PI% d% L d%  "6L"~ Ln H"6h  +&"d4e"  WH"6h d% "^g"[! "6 d% zzz+zz z +zkL{ +ZZZ +  ) +zzzz +zk)"Ϥ   L    L  ڃ  L  ك  L    L    L  Ã  L    L  ă  y ۃ  g Ń  U ƒ  CH"4h [ [H"4h     H"4h  L + ZZZ  +   ;iH;i +H "hhhh8PI0!HH "|hhzzzzz z +zk + +e8PI0%8PI08  L8ZPI0a8PI08R  L8(PI0/8PI0 8(  [8dPI0k8PI0 8\  3 +   # # L} + ZZ    LPHP))"d8PIL ) "de  ) "de  ) "de   ') "d e ' %) "d e  : + + e H + + e hLzzz z +zkZZ   +L + +H` w a"L +L  L L L w L  Ld"Ld"| "U   3  "zzk + ZZZ   ɀ L  L)8 + +P~P  )"0\: ["ډ6)8 + +P +~P))"ډx;"ډ JJJ ))"i  (#)JJJJI)8i0"ډ#)i0"ډ )"ډ~"ډ!  "ډzzzzz z +zk +  [𫫘;8 +;i-  +"d8PI ' L  ' L;i)HH +HH;i  4"dl%e"Xhhhh"[L     8PIL;ic i c  i c);i+zz z +zkL + "[ + +Lv ) )  )       `  "eYi "eY PI01   "eYi "eY PI0驇!  "eYi "eY PI0  "eYi "eY PI0   "eYi "eY PI0   zz z +zk + ;8    "*7)L7)%  Ȉ +& ? ".)   "+:L  7)ʆ ". ".)^ +  + "+:i:Щ "+: "k;izz z +zk + ;8 +   +C #  7".    L     " "k ":L@   +                  ; " ;i  "+ +  ;i  "+:  )ӣ ;i +zz z +zkZ  ) "de) "de  ) "de) "de  ) "de) "de  ) "deH) "deh ) "de +H) "deh +) "d H) "dh  zzk + ;8   :L;" +H`;i HK"aGhh ;i H\"aGhhL;"L>";i H)"aGhh ;i H:"aGhhL;"L>"yHw + +"g: + L>"L;"uHs + +"g: + oj"]EH + +"g: + oooq;izz z +zk + ;8 +;i +"ۺL#@7)L# K +i&   "[fhL# 7 "\  "L#$"      +" i " i" i"1e   "  7 ;izz z +zk + ;8 + +L%7 +"7hS?   >> + >> +>> +  L%>eL|% +L|% ȷ   ȷ ȗ">^ S?  7)" +"(  L$ S?;izz z +zk + ;8  + + S?Lw'7 S?La'& " S?La' +"mL]'   LV' 8 8 ȷ  ?ȗ + +" b Lx&       :   L&8    ;izz z +zk +ZZZ +  46 +":LL) +i6"^8  L=)U+ +i";x:LL) +iC"^ E :#:L=)L=)L=)  L=))):%:L=) +iF"^:L=)H):r +iI"^:Z +iK"^ɀ$ +iX"ĶiN +"^:Uzzzz +zk;8 +  9 )+3P57-P/1L*""H"_hF"Hd"bhd"HH"^hh 9 " ;i"w~ "d";;i +k + +eH + +eh + + + + + +eH@ + +eh + + + +@L) + ;8 + # :';i"L, : Ч) + L, +   ? _ * M;i" ;i "  L, L,L,   ?   ?  * :H  ",+h4  ) ;i" L+;izz z +zk + ZZZ  +  / : \ (   + : / L. \ L. +  & + "KL|.;i "n "+ 8* L. +  7 )zzzzz z +zk +i8H7 he +"ت + L-Lt- + [𫫘;8 + +d" H d"dh8 "i  "i  "i  "i  "i  "i  +"i  :0 :        "i  +"i                   :     #   ;i ++z +zk [𫫘ZZ"Y"Y:L1L1 L2"ϤRF:#.'"+/ +3Lk2L2"Ϥ7R;F?:C.G"KO +SwL2"ϤWR[F_:c.g"ko +s  zz+k"c"[Y ("6?""Z"6"0]    """{ "6"]H"6;i +"b +"6"δ +"6"1y<"6"Ga"h"6"&"6" "6""}"6""6"G]"6":H&"6h +"6"_^ "6"1N:I"} "6k +;8r +;i;i"{Lm6? A;i?"- +j Ld6i  EJL5][ "ت +EL5  + x  +;i "KD;i "?e  h;i?"s, +&;i? +"  " ;irz +zk + ;8 8PILe88PI0-;iH"1lhh;izz z +zk c  "*:L7;iH"1lhh8PI0L$H8"1lh$$ H"1lhh&;ic )"E\:&;ic  $;ic . "*:"1l)H"1lhL6;ic L6 + ;8  +7)Lz:LX:Lk:  Lk: + ".)LV:; +":LV: ***)  v ) +)Ȉ +&e?# )ʪeHeh +Ȉ +&  LS:## **) e# +e  + ***) ) ) + +e#) + +)eH)8 hȈ +&   +": +"k;izz z +zk + ;8"Y  +  L<<;"nZ"7m"Y - "Y +  "Y  "Y"Y  ;"nZ"uS?L.<"_[ʆ"] "_[ʆ"] +;i )"o:y  +]  + 8PI0E +"g[ʆ"`eHeh"Y"Y +L];"S? - II +    5  "Y  +"Y"Y  +;izz z +zk + ZZZZ +;i +"ۺL>)L>7)L> L>: + +"  +L= +"yb  % E  > & + "   @ j [ +i&   "[fh  7    +zzzzzz z +zk + ;8F +TR ;i;"{L@ +L@;i"KL?;i"?e L? C1/c)   +c    +e : +e ţ   L@ L@&$"_      'd Ci8c"Ķ  ;iFzz z +zk + ;8  +8 +PILB  LB [ LB):8PILB +):e  "d d  "LB"d d Md"de + +;i "ZLBLA +c  )"0\:I +;ie +"d)80eH +;i eh ; L7A ";izz z +zk +;ieL@ +;8  +:LE +H`;iH\"aGhh0?8"1l"_?\"hhhک"1lhZ;iHK"aGhh0="1l"_?K"hhhک"1lhL E;iH:"aGhh0?"1l"_?:"hhhکf"1lhZ;iH)"aGhh0= "1l"_?)"hhhکA"1lhL E"kHm"1lhh +J >  1)'"_?d",hh"1ld"1l;i z +zk + ;8 + + "oLE:d&#eHehJ)  II! #i0  JJJJ9  c      :;ic    А;ic ~ S +c : +c"Z::    '   ;ic)  +c  ;iz z +zk +  [𫫘;8, +;i;  +"d8PILH;i +"ѭLyH     8PIL;i-c i c  i c)LI"[LI;i "yj + +[[;i "c;i ;i"yj;i"c;i  +"`u:(;i +"`u: LG      + +[[ i "yj;i,+zz z +zk +;8    "  ) LJ  + 8 +PILK +A% "6 +S"6u +";h0;"Z"H +"}^ +"};iz +zk "d  LK   "de"i:f "de "de" + +   +L-J + ;8   +  LN )LN   +  "  .,Z ȈFjdLN, .  LM + Ȉ +&   g "yb%LN3#8 H h  LN +"       _ ȈFj eH eh  +i8H%he  ;i zz z +zkZZ"yj8PIL{P8PILkP8PILP8 +PILO˩"c s"c S"c ;i OYSY02wy ",. ~$&s^(*"$zzk "d   "de8PILN "dec "l09H "6h"ڣH"6hhLxN d% L`N ' LNN +;8 ;i"W;i ;i"{:LR / 1;i/"- +ZLRMK;i "o;i/;ic4"o ;ic"-: 7k9m?s AuLR;ic"pLR +;i +i "o    7)     7)LRk7 m9LR +  "ت  " X  " iX1 . $  mk"   : ;i/"s:  " ;iz +zk +;8  +"4;i{H"s ;i s  LlUt E LlUu L LlUv F LlU= + +bH`HbH`H;i"hhhhLoULoULoU   ßL\U "dcHHc" ;iH"s ;i  LHU  +H`LoULoUHH"HHHH"s ;i û㽰8㷅Hc"Hn dcHch c d c    LS;iz +zk +;8 + i  LW )LWN ȈFj dLWLW ȈFj  +:d%%LW +"ybLW%LW LWLW +"@LWCLW#LW "n:o "   i8H#he;iz +zk + ;8   LoZ   +    + : ʣ : p 0 7 9 (    +)808PI + LoZ / LhZ / ߩ + + +[[  +  + + +  + + + +   +   a !z  8      a !z  8       + + +  L>Y   / + 8PILY8PI + );izz z +zk +  [𫫘;8T +;ic 8PI0L\;i +"(L\ L\ +;i?"yj4;i?"c;i?H;iG;i"XhhhhL\;iU)|;i;iU"(;i"N:';iU;i?"yj%;i?;i "Lz[;i "1k""}L\9;igHH;i ;iC "IhhI"66;igHH;i  + "Ihh;iT+zz z +zk;ic LZ +;8V ;i;i"{:L_#% ;i#"-: +N L_;i"@ + +E +% + "\ L_ +"nL^ i8 "Hn .8  C iN "i8 +"i8iX "o .Y +-iX"  ;i#"prA?i "A? +"A?    " ";i +" ;iVz +zk +Z `   L`Jsuu +s"ZJJoqq +o"Zkmm +k"Zgii +g"Zcee +c"Z _aa +_"Z@[]] +["ZWYY +W"Z ` a   Lag J0SU&g U +S"ZCEE +C"Z ?AA +?"Z@;== +;"Z799 +7"Z a b   LqbJ355 +3"ZJJ/11 +/"ZJJ+-- ++"ZJJ+-) +'"Z b zz +zk + ;8  +  Le  Le    Ld  Lc  L e ȈFj +(cH*ch":  L e +i8H + +)he"Ķ%H%hL e +*(  ȈF j eHeh":  L e +i8H +)he"^L e Jc +*(H J)he":  L e +i8#e) +*(H J)he": + Mi8#e)) ))JJJJ;iz z +zk + ;8 +  +         Lg +  "Lg  + + Lg  ? 7   + Lg + . Lg#   Lg  LYg +@Z   # +    ,  .     +     M   2   ":):     P    "Fw  , . J    "~U   Le  ;i +zz z +zk + ZZZZ  + '"Z  +   Lj   +".  LNj +".  Li;i +"+  Li ɪ Li@ +".)e_ +:".)A;i +"+@    "Z:LhL:j +".          +".)/ +".)  "Z: '  )     +"k )zzzzzz z +zk;i +"+:   LLh;8&!!06#!c'o#8!6'o#:!c#:8!06!c%o! 8 #6%o!:c!: 8 #"d%"d8%"d!"de8%  Lmw"d8%U%c  cԣc @ c +` #c!w"d8%U%c cԣc @ c +` #c;i&k%c%cc8#cc8# c  Ll#c#c @  @  `  ` #c;8X;i ;i"{:Lp ;i "Hn Lo;i"C "" Loc "_y   +X &;ic  ;ic LnLp Lp%:;ie :ף % '-/;i%"KLp;i%"?eY;iCA "oCA    " LpLpLp;i%"ni CA"HnCA  ;iCA "o    " ;iXk + ;8  + +7 )Ls  +e:Ls i ;i  "oJLq @+ dFH H;i i "-Ehh "*dLsLs + LZqJJ  c " "nL s:L s   H + + + + +h8"KLs i "Fw   +  "[H   "Oh  "~U  : ЂLs +  "k   "Hn i   "o+7 H  h  ;izz z +zkLp +;8*    " + + +LvLv +HH "shhh 8 PI0LVv&("$8 PIF&(PIg +c;i c (&("$Lv"$L$v&(PIM$"Ȉ +&H +c)henC&($H$h +c  "$(&&("$Lt  + E ;Llt +  +";i*z +zk;8b ""{"r ;iH"z HH"| H"x;i"m   HH"9s"n  HH"9s"nH#H"9s;i"nHH"9s"n  HH"9s;i?"Ϥt"nhhLx"nhhLx"nhhLxG"nhhqf"nhh\"nhhG "nhh-9"nhh"nhh  HH"9shh"nhhY   HH"9s}?H?H;i" ;iH"n;i  R   HH"9s?H;i";iH"n;i +   HH"9s"n HH"9s"n;i + ;8 +  L>}L>}  L{  LS{  L8}ȈFj +(cH*ch"L8} )  +i8H + +)he"Ķ)  +i8H + +)he"  L8} +*( ȈF j eHeh"L8} +i8H +)he "1e  L8}Jc +*(HJ)he"L8} +i8H#he ) +  ') + + + +     +*(HJ)he"y +i8H#he)')# ) FjFjFjFj   ;izz z +zkHπ)hkH)hkH hkHπ)hkH)hkH hkHπ)hkH)hkH hkHπ)hkH)hkH hkH)hkH @hkڢkڢ"~k"&~"&~"&~k"2~"2~"2~\&~"?~"}"}"v}"}"?~"?~"?~"X} "}"?~k8k"}"}"~k"~"}"~"~"~"}"}k"}"}"}"?~"}\~\}"~\~k, H"~hk"2~"}"~"},"}N"~"~ڢ"}"~J"}"}"~"~"}"~"}"}"}k"}"}"} +"} i0"}"~"~"~8kڢ"}"}"}j"~"}"~"~"~"~, kx0"O~(k(kx0 @"~"~(kx0"~"}"}"}"}(kx0 "~"~(kx0"~"}(kx0_"}"~(kx0?"~"~(kx0"\()k0(k(kx0, H"~h(kx0"~"?~"~(k + ;8  + +"KLރ   ,.   "L܃ L܃? 7   L   L  L肩@+7)Lł @Z  #   ,.         U  :   ": ):          Lv  !"Fw L܃+7)0 +i  ";x:L܃  ,.     (  ,.    +"~U    L;i zz z +zk + [𫫘ZZZZ + &"@$  )?)*(,. "@$L~ +QH`8LLPà|@j耠XaF N47"pk"ϤL%L]LRLL|jsXF|4~"L=9$ + +Q +Q  + LD+ + 4 + " +  + V:@)w + 4 + " +  + zzzz+z +zk +;84;i!;"{LK><!##!8ʆ#!&#!LI#!  LV!%#' +;i%"yb%  +LHE  +i + + + #!L L#!#!*(   +  I  #! "   + L     #!  8#!i8c"^: + +  + W#!i8c"Ķ) + +c # : +     L  >#!#!  ;i4z +zk + ;8X  + " Y"pk +;i P"B;i ;iH;i "hhL"[*" J?(4Q)G | " Y"t;iH;i "hhL"[ʆ" ;iH;i "hhLЎ"[ʆE +EL;iH;i " +hh +L +"i: Lt +"i: {( +"i: P- +"i: (%V +"i:08 " YH"hhL+t +"6L+n"6q "6[m"6E"6/"6 "6;iXzz z +zk + ;8   R    + +_ "yb L%L  L +  LLS +LS +   "ybELL%LLh  "   + +  L + L  ii  '   L + + +"yb?E'%  + L +L|L +  +"z'! + "ze +   8ʆ    :     +=;izz z +zkZ8PI0LNHV"dh>>V"de>V"de>V"de + + >V"de>V"de>V"de>V"de>V"de >V"de""$$>V"de6688>V"de::<<>V"de&&((>V"de**,,>V"de..00>V"de2244>V"de>>@@>V"deBBDD>V"deFFHH>V"deJJLL>V"deNNPP>V"deRRTTzzk + ;8 + &$;i +"ۺ  L)  L7)L8 Hhd +  L77L ȈFj +:d%%z + +"yb  L%  L"  LcJ)L8 +c +8H   ")fh  L X8Hhd2 +i&8 +) e"o +) LZ L W +i&  "[fh  L 7  +i&  ")fh  L78 + +i&H7he  "o 8 &$ g c c   L ;izz z +zk + ;8"  H;i"chLb ?"    O )"]")"] +         "Hni") +  + + L% +L% + L% + +ed`dC5 d"]"`  +cHc +h % +cHc +h + +8H" +hL% i +" i " .  +")"])"] + +")"])"]   +")"]   +JJ))  + +cHch:")"])"] + +cHch:")"])"]  +cHch:")"]   +JJ))  +  i  + +cHch + + L䜣iU"1e"[fh;i"zz z +zk + ;8b  + ;i;i"{L;i/ ;i7 ;i7LW;i/ "KLW;iG"LW;iK"تH;i;h;i/"KLW;i/"?eV;iK"ت ;i/"~U LW;i;i/"B;i/c)LK  y :::;i/cc  £:c /  LLL " :c /  ) + +[[  c )L L_ + + /    H c   +  Z    +c       L +  + ;ibzz z +zk +;8|"]8ʆPP8 +ʆPP8ʆ +" +g? p Js?g?g?     +s?    +s?   +s?  +s?g?g?"j "rt ")z;i    8PIL"c"nR""=H H*HN"dd">"I"D"'4;iH"z ;i "1l 8g?PIL'8 PI0L6M "1l8g?PIm +i?X +s?"kHH;i3";i3"]H;i5H" ;i ;i-";i-"]H;i/H"hhh"{i +"{ +PIO"!aC"Ri +,8PI: +i?: +s? + +;ie"B;i|z +zk +i? +s?" + +;ie +s?" :L"bZ +i? 8 +s?"kHf "1lhh +s? + +;ie   L( 0 ( JJ 4 L + ;8 + &$;i +"ۺ  L+)  L+7)L-c8  L77L9 ȈFj +:%L", + +"@ +"@ @ L-E  L-%  L- + + W +i&  "[fh  L- 7 "  L-cJ)L +c +8H   "[fh  L-8Hhd?8 +) e +i&"o 7  +) L Z D +i&  ")fh  L-78 +   +i&H7he"o   8 &$ g c c      L;izz z +zk + ;8 +  LQ,.7L방  +  +e:L   +  +e!ؐ Lׯ8ic + d + "l c Lׯie  Lͱc) +  5 .i c . i c  Li c )L-ic ? B    i c)Zie  ) Li c).     A@Z9 ))%: cic    LS? 7  i"ĶHhi"^i"^;izz z +zk + ;8  +;i +"ۺ)   LԹ  %7)       L + Ȉ +&L :"] :"] x::II%%8 HhL +` +"@E  LԹ%  LԹ +  L      L8 HhcHch7)C +"@L +"yb%  LԹ9!  Lն  LԹcHch)b"  LԹ ȈFjeHeh !  @ 77Lҹ Lҹ U +i&  "[fh  _ 7  +i&  ")fh   ;izz z +zk + ;8N   +  + L ?# ;i;i "{Lv ;i"-DL;8;i"p   !  +  L)L)"\ 86i "86i "86"ت 86 86"86i"  L64;i " 9" :Hh  ) JJ J  W @    46 6"8$    Ll86"ت +86i"Ķ     +i&"Hn Lb Lb  + Ȉ +& +  + + x n +"yb + + # +  8Hh + LX )LX" } ȈFjeHeh +i&  ")fh  ;iNzz z +zk + ;8 +    .  + +"l%     Lģ  +"*1 +" -    +  +  "lL}£"lL}£& f LV8"@"")g"" c8 PI0 d Lc£"lL?£"8"@"")g" + +"c8PI0\c8 PIK8PI  +H"h"d +   "  Lfģ - $           " + +""_"l +"x"  0cH  h  :  88PI0L£& f LTĥ & $8 -  +  +"i0   +"*i0        LP  ,           )Е ;izz z +zk + ;8     "W Lˊ + + + + L˥ + # )/"Y  J   +L˩L  "Y  JL   +L˥ +"rLˣ Lˠ64 +iC"^ L˥ +iN"^# +i\"Ķ " H      Lˠ)"` +E) + +:Lˠ +: +7:L˥ +iI"^7: L˥ +iK"^# +iX"Ķ +iF"^  Lˣ +c JJJJeHeh   L8 Hh +"] L˩    L˦i$&c (* cHch02e +ib"^: Lˠ: L˥ +id"Ķ,.&&L)ʠ: L(cH*c h,.G"`Fj77eHeh&i ȈFj " L˩  L˥ +ih"^L˥ +":L   +i6"^UL˥ +i8"ĶRRkaAd +i"ĶrrEAa> +i "Ķ +i$"Ķ    ;izz z +zk +;8B57 1" + + +Lӣ-/) + % '!#  1L +HH"shhh383PI0Lө-/))++%'!!## 9? A;=%%83PI0?-/))++%'!!##9 ?A ;=Ḷ)+L.Υ +c% Z /    F +c% z d    !#  L2өLӣLϣ?ALϣ! # " +c%))#H#hHH} "6hh  Lϥ +c%)#H#hHHc "6hh  Lϥ +c%)Ȉ +&#H#h  5 +c%)     LEң?ALѣ;=Lѣ 8?HCh" +c%))Hh92,75!#7H7H"6hhHH "6hh Lѥ +c%)Hh92,75!#7H7H"6hhHH "6hh Lѥ +c%)Ȉ +&Hh 5#H#h +c%)    u8;H?hC  +c%     ! # L;cH?ch8        9 ?A ;=%+)!#!)#+!# 9? A;=%Lͩ "61;iBz +zk + ;8   + ;i"C%L1ۥ)H + + e h   f/_\Xɀ"_L1ۣ L1ۣ   + +eL ԣ    f / Lۣ \ L            + : +e.I L\֥ + : +e.L\֥ + :: +e.L\֣ +e , Hi eh L1ۊ  .i e   2 +: +e . :ʦ + +eL1۩  + +e Lۣ % + +e. +     ' +: +e. :բ i  "Hn  )       + +e  L=ڣ Lyۣ.  Lyۣ L٣ L٣ɀK  "#:#)    } :.      Lۣ   i c     L٣Lj٩"_{AZ     a'z  8        $_         i c     Lۣ    4       LC      + +     # #  +     JJNJ              + ;iz z +zk  + +     '         Lף  L֣L + ;8   ;iO"m;i +    L1ߣ % ;iO" L3 + +      0 0 0     " O - %         "  * . +   %  n +   0 D9  9 +"d)e80      +%   . L    * 4 +     s   0 D9  9 +"d)e80      +     +   l d    l '            %;iO" ;izz z +zkF)"ϤLi + + ;c)L0 +# :#%;iO""ԣ +)/:"  ;iO"ʣ%;iO "إ  + +L3LߩEL +7;iO" L3 # :Gi + + -+)'L# :L d EiGiʃL d 7;ʃ + + -+)' d L-H;i;i'8  -+)' ;i;i;i +"y  ;i;i;i +"v  3 x  'c      #0cH;i1ch # # L<#:&##;i/c - ##:#%;iO""ԣ:;iO;i/c"ң%;iO "إ  + +L3iH +;i1"h;i/"] +# :# +%;iO"" + +ԩ;i/c)6 +%;iO "إ J;iO;i/c";iO"  L" + ;88"ZDF HJ "Y "}Y  L % L "Y "}Y    % L  +  +) '+@aZ  )"Ϥ+"Y6+"Y'++"Y "Y )L+L 0 {9 p 80  #+-' + + +c)c"Y+ )L) + + +c)c+"Y L * L#+3 +  +)L + + 8  ' L . .#+;i8zz z +zk+"YL z  t  . "Y+L l h   j +#"Ye l *#+ ++#"Y3 h L1#+ ++#"Y )'"Y "}Y   +   +)'"$ &   L& p :#&"$ + & +)'ǩ & E G & & e 7g & ,"Z"Z- L &  S L c Lw: s L& d LR: i LR# &"Z"Z L # # )   # "$ r &)"Ϥ#  +"Z L$""Y $""}Y  V ;  # @ LHh HH"Y";_hhL"Z%# `  "Z #   $;"Z "H;i/h8  #    LE"Y%H"zZh"Z"Y&)H"zZh"Z"$ L# "ZiNʆ# (# +I)8ʆ# "8  +  #   % +;"Z "H;i/h8  "$    #NJ + )8PI)  # @# #      # c):;i-e 0 #  %   @#     "#     # L# E) )8PI "LZc      +    )8PI' "Y H"zZh"Z  ȣ     )8PI0  "LZ # Q "Y0H"zZh"Z@# .  # xX"YH"zZh"Z  [# N #  +  #  -  "Y )H"zZh"Z  )8PI#"Y0H"zZh"Z:    = : "Y );i-e)H"zZh"Z    L - ;"Z ]"Z"Z   #  "4b  # 1  "Y H"zZh"Z : ۣ    L  "Y)H"zZh"Z: :  "$ "Y H"zZh"Z:ݣ Lg    "Y)H"zZh"Z Li @!#%')+-/7:=@CFILORUX[^a@@0 XiaO +pj v :Di F 2[VgC/[+V'''''''''######''# ##'# '# '# ##'## ##'''# #''''''''''######## ########'''''''''''##'# ''''''''######## ''''''''######## gcJ''##'; #''# '''# ### ### '''# '#                                                                      gcJ gcJ; gcJ; gcJ; gcJ; gcJ; gcJ; gcJ; ; #' #''' ### ### #''' #''''''''''######'## #' #' #'## #''## ##'''# #'''# '##'' ########''''''''gcJ; ########'''''''' #'##''''# #''# #''# #''# #''# #''# #''# #''# #''# #''# #''# #''# #''# #''# #''# #''# #'''# #'''## ##''# ##'# '# '# ##'## ##'''# #''''''''''######## ########''''''''''# #'''## ##'## #' #' #'## #''## ##'''# #''''# #'''## ##''# ##'# '# '# ##'######'''''''''''''''''######## ########''''''''''# #'''## ##'## #' #' #'## #''######'''''''''1_ZD  F/ OG  +s 312Q@4 m* $Fsn{gk + ;8N +;i"W L: + + + + G  G"Y  JL: +L: + +2 +CECEH;iEI"chCE(CEEC:E%C% +CEH' 4   " ) 52$HJJJJJJh":  "8:77 +H"]H"7979L:\ +Z +L:JLJ +L H;iLI"chL:4??JL!?8JJLL +  + + +? A +? AJɀLL: +  + 4JJ4J   4JL:   "\cJHcNh$&  +; ==;  L|LHLhZJ h  +#= +#d + '&LJ"](**(&& +  +i + i Hd +e + e +:H"] + (*7(*+    +, .(*LpL:LNLJ ȈFj +  += +d + '&LJ"] +  + .  +& + +i  <   +"`Fji  cH:H"] + "Ȉ +&H"]    +, .(*?cHCch.,5"`cHchc(Hc,h020cCH4cGh + +:EC:II%%80H4h  9cHch + cc + ,,..L5"]F: + iiii +  +  + 5"]c,Hc0h + ,. &&&& + 0c +H4ch + 8 +?HChJLL:8JHNhH209"`h8Hh8(H,h "] +   - + !;=Ff   L} L:  L + r;=& &@ &  p4JJ   =; P;= &  +  0L: + 7;=+ &    ;=LPL:   + L:H +"Hn + "o +i H"1e   +i"1e 5   +"  +i"1eJL +iJ"1e +i LJ"   +i?"1e +i"1e +iA?"  L  +iC&$" +i$.," +i," +i0"1e +i2"1e @ )B J  +iG"of +i'&$" +i,"1e $ )& 6  +i+"o +iU"1eCA +I"[fhL:  LH CAi +I"[fhH +"Hn +RRaA" +irrAa" +i +:" +i" +iU"1eCAi +I"[fhCA +I"[fh7H"d +"Hn +  + 5L8  ( +* + +  + + + + + + 79 + + + 7 +9 + + + H +I"[fhL:cHch + 8Hh + L      ZJL   4          49JL H +;iI"hL:HI"chL:L:  H +" +i" +i"A   + + +  + + +  + +", +. + 79 + + + 7 +9 + + + H +I"[fh;iNzz z +zkH +"HncHch + 8Hh + L + L{ \G\G]\_]\]\t}\\0\o\}\\ɛ\s\F\(\\\U\\j\\\ \#t\$\*\2\\\n\\;\\u\q\/\F\R\t|\Ӛ\o\̓\p\Z\c \aG\]\e\{\.\\!a\2c\\\Or\rt\)z\r\9s\s\|z\z\|\\x\o\?\\r\x\\n\`\j\i\_\\R\_\q\\\2\\$\B\0HZ +  + [dH"_+z +zzz z +zzzzzzh@0HZ +  + [dH"Y+z +zzz z +zzzzzzh@8[dH\kqP \ No newline at end of file diff --git a/roms/f256jr2/toolbox.csv b/roms/f256jr2/toolbox.csv new file mode 100644 index 0000000..9f2c660 --- /dev/null +++ b/roms/f256jr2/toolbox.csv @@ -0,0 +1,18 @@ +"20","toolbox-20.bin" +"21","toolbox-21.bin" +"22","toolbox-22.bin" +"23","toolbox-23.bin" +"24","toolbox-24.bin" +"25","toolbox-25.bin" +"26","toolbox-26.bin" +"27","toolbox-27.bin" +"28","toolbox-28.bin" +"29","toolbox-29.bin" +"2A","toolbox-2A.bin" +"2B","toolbox-2B.bin" +"2C","toolbox-2C.bin" +"2D","toolbox-2D.bin" +"2E","toolbox-2E.bin" +"2F","toolbox-2F.bin" +"30","toolbox-30.bin" +"3F","toolbox-3F.bin" diff --git a/roms/toolbox_f256jr2_01_01_0009.zip b/roms/toolbox_f256jr2_01_01_0009.zip new file mode 100644 index 0000000..d1887be Binary files /dev/null and b/roms/toolbox_f256jr2_01_01_0009.zip differ diff --git a/src/Makefile b/src/Makefile index 2cc982c..f92dd15 100644 --- a/src/Makefile +++ b/src/Makefile @@ -48,6 +48,17 @@ else ifeq ($(UNIT),F256) else LDFLAGS_FOR_UNIT=C256/f256-ld_lc.scm clib-lc-ld.a --rtattr printf=medium --cstartup=f256 endif +else ifeq ($(UNIT),F256JR2) + CPU=w65816 + C_SRCS_DEBUGGER=$(DEBUGGER)/agent.c $(DEBUGGER)/c256-uart.c $(DEBUGGER)/low_level_WDC65816.s + SRCS_FOR_UNIT=cartridge.c C256/jumptable.s C256/io_stubs.c C256/extras.s C256/iecll.s C256/interrupts.s C256/f256-cstartup.s + CFLAGS_FOR_UNIT=-DMODEL=35 -DCPU=255 --code-model large --data-model large --target f256 + + ifeq ($(MEMORY),ROM) + LDFLAGS_FOR_UNIT=C256/f256k2-flash.scm clib-lc-ld.a --rtattr printf=medium --cstartup=f256 + else + LDFLAGS_FOR_UNIT=C256/f256-ld_lc.scm clib-lc-ld.a --rtattr printf=medium --cstartup=f256 + endif else ifeq ($(UNIT),F256K) CPU=w65816 C_SRCS_DEBUGGER=$(DEBUGGER)/agent.c $(DEBUGGER)/c256-uart.c $(DEBUGGER)/low_level_WDC65816.s diff --git a/src/dev/Makefile b/src/dev/Makefile index b8af468..512f339 100644 --- a/src/dev/Makefile +++ b/src/dev/Makefile @@ -39,6 +39,13 @@ else ifeq ($(UNIT),F256) SRCS_FOR_UNIT=txt_f256.c kbd_f256.c kbd_f256jr.c indicators_c256.c interrupts_f256.c sdc_f256.c iec.c # timers_c256.c CFLAGS_FOR_UNIT=-DMODEL=2 -DCPU=255 --code-model large --data-model large --target f256 +else ifeq ($(UNIT),F256JR2) + CC=cc65816 + AS=as65816 + AR=nlib + + SRCS_FOR_UNIT=txt_f256.c kbd_f256.c kbd_f256jr.c indicators_c256.c interrupts_f256.c sdc_f256.c iec.c # timers_c256.c + CFLAGS_FOR_UNIT=-DMODEL=35 -DCPU=255 --code-model large --data-model large --target f256 else ifeq ($(UNIT),F256K) CC=cc65816 AS=as65816 diff --git a/src/dev/console.c b/src/dev/console.c index 3ef98fb..a4fb7ef 100644 --- a/src/dev/console.c +++ b/src/dev/console.c @@ -22,7 +22,7 @@ #if MODEL == MODEL_FOENIX_A2560K #include "dev/kbd_mo.h" -#elif MODEL == MODEL_FOENIX_F256 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256JR2 #include "dev/kbd_f256jr.h" #elif MODEL == MODEL_FOENIX_F256K #include "dev/kbd_f256k.h" diff --git a/src/dev/kbd_f256.h b/src/dev/kbd_f256.h index 94a2605..3dc0332 100644 --- a/src/dev/kbd_f256.h +++ b/src/dev/kbd_f256.h @@ -14,7 +14,7 @@ #include "sys_general.h" -#if MODEL == MODEL_FOENIX_F256 +#if MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256JR2 #include "kbd_f256jr.h" #elif MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 #include "kbd_f256k.h" diff --git a/src/dev/sdc_f256.c b/src/dev/sdc_f256.c index 31f6765..48e2f7c 100644 --- a/src/dev/sdc_f256.c +++ b/src/dev/sdc_f256.c @@ -10,6 +10,7 @@ */ #include +#include #include "log_level.h" #define DEFAULT_LOG_LEVEL LOG_ERROR diff --git a/src/fatfs/Makefile b/src/fatfs/Makefile index 8bda430..d8246e6 100644 --- a/src/fatfs/Makefile +++ b/src/fatfs/Makefile @@ -31,6 +31,16 @@ else ifeq ($(UNIT),F256) SRCS_FOR_UNIT=toolbox_bdev.c CFLAGS_FOR_UNIT=-DMODEL=2 -DCPU=255 --code-model large --data-model large --target f256 + ifeq ($(MEMORY),ROM) + LDFLAGS_FOR_UNIT=C256/flash-f256.scm clib-lc-ld.a --rtattr printf=medium + else + LDFLAGS_FOR_UNIT=C256/ld_lc_f256.scm clib-lc-ld.a --rtattr printf=medium + endif +else ifeq ($(UNIT),F256JR2) + CPU=w65816 + SRCS_FOR_UNIT=toolbox_bdev.c + CFLAGS_FOR_UNIT=-DMODEL=35 -DCPU=255 --code-model large --data-model large --target f256 + ifeq ($(MEMORY),ROM) LDFLAGS_FOR_UNIT=C256/flash-f256.scm clib-lc-ld.a --rtattr printf=medium else diff --git a/src/include/F256/gabe_f256.h b/src/include/F256/gabe_f256.h index 8f3e49a..4e3db81 100644 --- a/src/include/F256/gabe_f256.h +++ b/src/include/F256/gabe_f256.h @@ -62,7 +62,7 @@ */ union gabe_sys_stat_u { struct { - uint8_t machine_id:5; + uint8_t machine_id:6; }; uint8_t reg; }; diff --git a/src/include/features.h b/src/include/features.h index 5f79236..ee92b5e 100644 --- a/src/include/features.h +++ b/src/include/features.h @@ -41,7 +41,7 @@ #define HAS_EXTERNAL_SIDS 1 #define HAS_OPL3 1 #define HAS_PATA 1 -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256KE || MODEL == MODEL_FOENIX_F256K +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256KE || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256JR2 #define HAS_OPL3 1 #define HAS_IEC 1 #endif diff --git a/src/include/gabe_reg.h b/src/include/gabe_reg.h index 1786455..3365596 100644 --- a/src/include/gabe_reg.h +++ b/src/include/gabe_reg.h @@ -18,7 +18,7 @@ #elif MODEL == MODEL_FOENIX_FMX || MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS #include "C256/gabe_c256.h" -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #include "F256/gabe_f256.h" #endif diff --git a/src/include/ps2_reg.h b/src/include/ps2_reg.h index aeca665..66cbc79 100644 --- a/src/include/ps2_reg.h +++ b/src/include/ps2_reg.h @@ -17,7 +17,7 @@ #elif MODEL == MODEL_FOENIX_FMX || MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS #include "C256/ps2_c256.h" -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #include "F256/ps2_f256.h" #endif diff --git a/src/include/rtc_reg.h b/src/include/rtc_reg.h index 66c2aff..77ba9e7 100644 --- a/src/include/rtc_reg.h +++ b/src/include/rtc_reg.h @@ -67,7 +67,7 @@ #define RTC_CTRL ((volatile unsigned char *)0xaf080e) #define RTC_CENTURY ((volatile unsigned char *)0xaf080f) -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #define RTC_BASE ((volatile unsigned char *)0xf01690) #define RTC_SEC ((volatile unsigned char *)0xf01690) diff --git a/src/include/sound_reg.h b/src/include/sound_reg.h index f177d44..9e2ac11 100644 --- a/src/include/sound_reg.h +++ b/src/include/sound_reg.h @@ -16,7 +16,7 @@ #elif MODEL == MODEL_FOENIX_FMX || MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS #include "C256/sound_c256.h" -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #include "F256/sound_f256.h" #endif diff --git a/src/include/timers_reg.h b/src/include/timers_reg.h index fd65363..5cf21c9 100644 --- a/src/include/timers_reg.h +++ b/src/include/timers_reg.h @@ -16,7 +16,7 @@ #elif MODEL == MODEL_FOENIX_FMX || MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS #include "C256/timers_c256.h" -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #include "F256/timers_f256.h" #endif diff --git a/src/include/uart_reg.h b/src/include/uart_reg.h index 3cd52f3..28a9fef 100644 --- a/src/include/uart_reg.h +++ b/src/include/uart_reg.h @@ -15,7 +15,7 @@ #define UART1_BASE 0x00B028F8 /* Base address for UART 1 (COM1) */ #define UART2_BASE 0x00B028F9 /* Base address for UART 2 (COM2) */ -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #define UART1_BASE 0x00F01630 /* Base address for UART 1 (COM1) */ #define UART2_BASE 0x00F01630 /* Base address for UART 2 (COM2) */ @@ -95,7 +95,7 @@ #define UART_57600 21 /* Code for 57600 bps */ #define UART_115200 10 /* Code for 115200 bps */ -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #define UART_300 5244 /* Code for 300 bps */ #define UART_1200 1311 /* Code for 1200 bps */ diff --git a/src/include/vicky_general.h b/src/include/vicky_general.h index 6535d40..957f8c7 100644 --- a/src/include/vicky_general.h +++ b/src/include/vicky_general.h @@ -17,7 +17,7 @@ #elif MODEL == MODEL_FOENIX_FMX || MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS #include "C256/vicky_ii.h" -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #include "F256/vicky_ii.h" #endif diff --git a/src/interrupt.h b/src/interrupt.h index 2b4a60c..df1ba37 100644 --- a/src/interrupt.h +++ b/src/interrupt.h @@ -71,7 +71,7 @@ #define MASK_GRP2 ((volatile uint8_t *)0x00014e) #define MASK_GRP3 ((volatile uint8_t *)0x00014f) -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #define PENDING_GRP0 ((volatile uint8_t *)0xf01660) #define PENDING_GRP1 ((volatile uint8_t *)0xf01661) diff --git a/src/memory.c b/src/memory.c index e90dde9..02404e3 100644 --- a/src/memory.c +++ b/src/memory.c @@ -25,7 +25,7 @@ unsigned long mem_top_of_ram = 0; void mem_init() { #if MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K mem_top_of_ram = 0x06ffff; -#elif MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 mem_top_of_ram = 0x0effff; #elif MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS || MODEL == MODEL_FOENIX_FMX mem_top_of_ram = 0x37ffff; diff --git a/src/snd/Makefile b/src/snd/Makefile index b4c9c83..775997e 100644 --- a/src/snd/Makefile +++ b/src/snd/Makefile @@ -39,6 +39,13 @@ else ifeq ($(UNIT),F256) SRCS_FOR_UNIT=psg.c codec_c256.c sid.c CFLAGS_FOR_UNIT=-DMODEL=2 -DCPU=255 --code-model large --data-model large --target f256 +else ifeq ($(UNIT),F256JR2) + CC=cc65816 + AS=as65816 + AR=nlib + + SRCS_FOR_UNIT=psg.c codec_c256.c sid.c + CFLAGS_FOR_UNIT=-DMODEL=35 -DCPU=255 --code-model large --data-model large --target f256 else ifeq ($(UNIT),F256K) CC=cc65816 AS=as65816 diff --git a/src/snd/psg.c b/src/snd/psg.c index 7d66138..93a2953 100644 --- a/src/snd/psg.c +++ b/src/snd/psg.c @@ -35,7 +35,7 @@ static volatile uint8_t * psg_port(short chip) { port = (uint8_t *)PSG_PORT; break; } -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 switch (chip) { case 1: port = PSG_PORT_L; diff --git a/src/snd/sid.c b/src/snd/sid.c index bfbc757..06d8816 100644 --- a/src/snd/sid.c +++ b/src/snd/sid.c @@ -73,7 +73,7 @@ void sid_init_all() { } -#if MODEL == MODEL_FOENIX_FMX || MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS || MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#if MODEL == MODEL_FOENIX_FMX || MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS || MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 /* * Test the internal SID implementation */ diff --git a/src/sys_general.c b/src/sys_general.c index ef1204d..dcd105e 100644 --- a/src/sys_general.c +++ b/src/sys_general.c @@ -28,6 +28,22 @@ const char * sys_model_name[] = { "F256 K2", "F256 Ke", "F256 K2e" // 20 + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", // 25 + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", // 30 + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "F256JR2" }; /* @@ -158,7 +174,7 @@ SYSTEMCALL void sys_get_information(p_sys_info info) { break; } -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 machine_id = GABE_SYS_STAT->machine_id; cpu = CPU_WDC65816; diff --git a/src/sys_general.h b/src/sys_general.h index 74f4534..7f9ca58 100644 --- a/src/sys_general.h +++ b/src/sys_general.h @@ -30,7 +30,8 @@ #define MODEL_FOENIX_F256K2 17 #define MODEL_FOENIX_F256K 18 #define MODEL_FOENIX_F256KE 19 -#define MDOEL_FOENIX_F256K2E 20 +#define MODEL_FOENIX_F256K2E 20 +#define MODEL_FOENIX_F256JR2 35 /* IDs for the CPUs supported */ diff --git a/src/timers.c b/src/timers.c index 7720021..be49cbc 100644 --- a/src/timers.c +++ b/src/timers.c @@ -22,7 +22,7 @@ void timers_init() { *TIMER_TCR1 = TCR_ENABLE_3 | TCR_CNTUP_3; -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 // Timers off *TIMER_CTRL_0 = 0; @@ -54,7 +54,7 @@ SYSTEMCALL long timers_jiffies() { #if MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS return *TIMER_VALUE_3; -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 uint32_t result = (uint32_t)(*TIMER_CHG_L_1) | ((uint32_t)(*TIMER_CHG_M_1) << 8) | ((uint32_t)(*TIMER_CHG_H_1) << 16); return result; diff --git a/src/toolbox.c b/src/toolbox.c index 51e2154..7ffb4b6 100644 --- a/src/toolbox.c +++ b/src/toolbox.c @@ -33,7 +33,7 @@ #elif MODEL == MODEL_FOENIX_C256U || MODEL == MODEL_FOENIX_C256U_PLUS || MODEL == MODEL_FOENIX_FMX #include "dev/txt_c256.h" #include "dev/txt_evid.h" -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 #include "cartridge.h" #include "dev/txt_f256.h" #include "dev/kbd_f256.h" @@ -119,7 +119,7 @@ void initialize() { txt_init_screen(TXT_SCREEN_EVID); } -#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 +#elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256JR2 *vky_brdr_col_red = 0x80; *vky_brdr_col_green = 0x00; *vky_brdr_col_blue = 0x80; diff --git a/src/version.h b/src/version.h index 5a9ae08..4bc6355 100644 --- a/src/version.h +++ b/src/version.h @@ -7,6 +7,6 @@ #define VER_MAJOR 1 #define VER_MINOR 1 -#define VER_BUILD 4 +#define VER_BUILD 9 #endif