43#if defined(__pc1403__)
49static void op_addxl(
Environment * _environment,
int _offset ) {
53 outline1(
"ADIM 0x%2.2x", (
unsigned char)(_offset & 0xff) );
72static void op_addabc(
Environment * _environment ) {
80static void op_addx_direct(
Environment * _environment,
int _offset ) {
84 outline1(
"ADIM 0x%2.2x", (
unsigned char)(_offset & 0xff) );
88 outline1(
"ADIM 0x%2.2x", (
unsigned char)((_offset>>8) & 0xff) );
92static void op_anda_direct(
Environment * _environment,
int _direct ) {
105static void op_andam(
Environment * _environment ) {
112static void op_addya(
Environment * _environment ) {
122static void op_addyl_direct(
Environment * _environment,
int _offset ) {
126 outline1(
"ADIM 0X%2.2x", (
unsigned char)(_offset & 0xff) );
130static void op_addy_direct(
Environment * _environment,
int _offset ) {
134 outline1(
"ADIM 0X%2.2x", (
unsigned char)(_offset & 0xff) );
138 outline1(
"ADIM 0X%2.2x", (
unsigned char)((_offset>>8) & 0xff) );
142static void op_call(
Environment * _environment,
char * _label ) {
161static void op_cp_direct(
Environment * _environment,
int _value ) {
163 outline1(
"CPIA 0x%2.2x", (
unsigned char)(_value & 0xff));
173static void op_decjnz(
Environment * _environment,
char * _label ) {
180static void op_decjz(
Environment * _environment,
char * _label ) {
187static void op_decinz(
Environment * _environment,
char * _label ) {
194static void op_decijnz(
Environment * _environment,
char * _label ) {
203static void op_deciz(
Environment * _environment,
char * _label ) {
210static void op_decijz(
Environment * _environment,
char * _label ) {
219static void op_fild_direct(
Environment * _environment,
int _value ) {
221 outline1(
"LII 0x%2.2x", (
unsigned char)( _value & 0xff ) );
238static void op_lda(
Environment * _environment,
char * _address ) {
245static void op_lda_direct(
Environment * _environment,
int _value ) {
247 outline1(
"LIA 0x%2.2x", (
unsigned char)(_value & 0xff) );
251static void op_ldb(
Environment * _environment,
char * _address ) {
261static void op_ldb_direct(
Environment * _environment,
int _value ) {
263 outline1(
"LIB 0x%2.2x", (
unsigned char)(_value & 0xff) );
267static void op_lda_address_low(
Environment * _environment,
char * _address ) {
273static void op_lda_address_high(
Environment * _environment,
char * _address ) {
279static void op_lda_x(
Environment * _environment ) {
287static void op_lda_xn(
Environment * _environment ) {
293static void op_ldklmn(
Environment * _environment,
char * _address ) {
303static void op_ldk(
Environment * _environment,
char * _address ) {
313static void op_ldl(
Environment * _environment,
char * _address ) {
323static void op_ldm(
Environment * _environment,
char * _address ) {
333static void op_ldn(
Environment * _environment,
char * _address ) {
343static void op_ldklmn_direct(
Environment * _environment,
int _value ) {
345 outline1(
"LIA 0x%2.2x", (
unsigned char)( _value & 0xff ) );
349 outline1(
"LIA 0x%2.2x", (
unsigned char)( (_value>>8) & 0xff ) );
353 outline1(
"LIA 0x%2.2x", (
unsigned char)( (_value>>16) & 0xff ) );
357 outline1(
"LIA 0x%2.2x", (
unsigned char)( (_value>>24) & 0xff ) );
363static void op_stxl(
Environment * _environment,
char * _address ) {
373static void op_stxh(
Environment * _environment,
char * _address ) {
383static void op_ldxl_direct(
Environment * _environment,
int _value ) {
385 outline1(
"LIA 0x%2.2x", (
unsigned char)( _value & 0xff ) );
391static void op_ldxl(
Environment * _environment,
char * _address ) {
401static void op_ldxh_direct(
Environment * _environment,
int _value ) {
403 outline1(
"LIA 0x%2.2x", (
unsigned char)( _value & 0xff ) );
409static void op_ldxh(
Environment * _environment,
char * _address ) {
419static void op_ldx_direct(
Environment * _environment,
int _value ) {
421 outline1(
"LIA 0x%2.2x", (
unsigned char)( _value & 0xff ) );
425 outline1(
"LIA 0x%2.2x", (
unsigned char)( (_value >> 8) & 0xff ) );
431static void op_ldyl_direct(
Environment * _environment,
int _value ) {
434 outline1(
"LIA 0x%2.2x", (
unsigned char)( _value & 0xff ) );
441static void op_ldyl(
Environment * _environment,
char * _address ) {
451static void op_ldyh_direct(
Environment * _environment,
int _value ) {
454 outline1(
"LIA 0x%2.2x", (
unsigned char)( _value & 0xff ) );
461static void op_ldyh(
Environment * _environment,
char * _address ) {
471static void op_styl(
Environment * _environment,
char * _address ) {
481static void op_styh(
Environment * _environment,
char * _address ) {
491static void op_ldy_direct(
Environment * _environment,
int _value ) {
493 outline1(
"LIA 0x%2.2x", (
unsigned char)( _value & 0xff ) );
497 outline1(
"LIA 0x%2.2x", (
unsigned char)( (_value >> 8) & 0xff ) );
503static void op_jc(
Environment * _environment,
char * _label ) {
508 sprintf( longJump,
"%slong", label );
510 outhead1(
".ifgt 128 - ( %s-. ) ", _label);
520static void op_jnc(
Environment * _environment,
char * _label ) {
525 sprintf( longJump,
"%slong", label );
527 outhead1(
".ifgt 128 - ( %s-. ) ", _label);
537static void op_jp(
Environment * _environment,
char * _label ) {
543static void op_jz(
Environment * _environment,
char * _label ) {
548 sprintf( longJump,
"%slong", label );
550 outhead1(
".ifgt 128 - ( %s-. ) ", _label);
560static void op_jnz(
Environment * _environment,
char * _label ) {
565 sprintf( longJump,
"%slong", label );
567 outhead1(
".ifgt 128 - ( %s-. ) ", _label);
577static void op_ldi(
Environment * _environment,
char * _address ) {
587static void op_sti(
Environment * _environment,
char * _address ) {
597static void op_ldi_direct(
Environment * _environment,
int _value ) {
599 outline1(
"LII 0x%2.2x", (
unsigned char)(_value & 0xff ) );
603static void op_ldj(
Environment * _environment,
char * _address ) {
613static void op_stj(
Environment * _environment,
char * _address ) {
623static void op_ldj_direct(
Environment * _environment,
int _value ) {
625 outline1(
"LIJ 0x%2.2x", (
unsigned char)(_value & 0xff ) );
629static void op_ldij(
Environment * _environment,
char * _address ) {
639static void op_ldijab(
Environment * _environment,
char * _address ) {
649static void op_ldij_direct(
Environment * _environment,
int _value ) {
651 outline1(
"LII 0x%2.2x", (
unsigned char)(_value&0xff) );
652 outline1(
"LIJ 0x%2.2x", (
unsigned char)((_value>>8)&0xff) );
656static void op_ldab(
Environment * _environment,
char * _address ) {
667static void op_ldab_direct(
Environment * _environment,
int _value ) {
669 outline1(
"LIB 0x%2.2x", (
unsigned char)(_value&0xff) );
670 outline1(
"LIA 0x%2.2x", (
unsigned char)((_value>>8)&0xff) );
674static void op_ldk_direct(
Environment * _environment,
int _value ) {
676 outline1(
"LIA 0x%2.2x", (
unsigned char)(_value) );
683static void op_stk(
Environment * _environment,
char * _address ) {
693static void op_ldl_direct(
Environment * _environment,
int _value ) {
695 outline1(
"LIA 0x%2.2x", (
unsigned char)(_value) );
701static void op_stl(
Environment * _environment,
char * _address ) {
711static void op_ldm_direct(
Environment * _environment,
int _value ) {
713 outline1(
"LIA 0x%2.2x", (
unsigned char)(_value) );
719static void op_stm(
Environment * _environment,
char * _address ) {
729static void op_ldn_direct(
Environment * _environment,
int _value ) {
731 outline1(
"LIA 0x%2.2x", (
unsigned char)(_value) );
737static void op_stn(
Environment * _environment,
char * _address ) {
747static void op_ldx(
Environment * _environment,
char * _address ) {
759static void op_ldy(
Environment * _environment,
char * _address ) {
771static void op_lddp_direct(
Environment * _environment,
char * _address ) {
778static void op_lddp(
Environment * _environment,
char * _address ) {
829static void op_sta(
Environment * _environment,
char * _address ) {
839static void op_stab(
Environment * _environment,
char * _address ) {
857static void op_stb(
Environment * _environment,
char * _address ) {
867static void op_sta_y(
Environment * _environment ) {
874static void op_sta_yn(
Environment * _environment ) {
880static void op_subba(
Environment * _environment ) {
887static void op_subab(
Environment * _environment ) {
895static void op_subabc(
Environment * _environment ) {
937static void op_wait_direct(
Environment * _environment,
int _value ) {
955 _environment->
stackSize = 0x005b - 0x000c;
1035 cpu_beq( _environment, _label );
1054 op_ldx( _environment, _address );
1056 op_lda_x( _environment );
1058 op_sta( _environment, _target );
1064 op_ldy( _environment, _address );
1066 op_lda( _environment, _source );
1068 op_sta_y( _environment );
1074 op_ldy( _environment, _address );
1076 op_lda_direct( _environment, _source );
1078 op_sta_y( _environment );
1084 op_ldx( _environment, _address );
1086 op_lda_x( _environment );
1088 op_sta( _environment, _target );
1090 op_lda_xn( _environment );
1098 op_ldy( _environment, _address );
1100 op_lda( _environment, _source );
1102 op_sta_y( _environment );
1106 op_sta_yn( _environment );
1113 op_ldy( _environment, _address );
1115 op_lda_direct( _environment, (
unsigned char)(_source & 0xff ) );
1117 op_sta_y( _environment );
1119 op_lda_direct( _environment, (
unsigned char)((_source>>8) & 0xff ) );
1121 op_sta_yn( _environment );
1128 op_ldx( _environment, _address );
1130 op_lda_x( _environment );
1132 op_sta( _environment, _target );
1134 op_lda_xn( _environment );
1138 op_lda_xn( _environment );
1142 op_lda_xn( _environment );
1151 op_ldy( _environment, _address );
1153 op_lda( _environment, _source );
1155 op_sta_y( _environment );
1159 op_sta_yn( _environment );
1163 op_sta_yn( _environment );
1167 op_sta_yn( _environment );
1173 op_ldy( _environment, _address );
1175 op_lda_direct( _environment, (
unsigned char)(_source&0xff) );
1177 op_sta_y( _environment );
1179 op_lda_direct( _environment, (
unsigned char)((_source>>8)&0xff) );
1181 op_sta_yn( _environment );
1183 op_lda_direct( _environment, (
unsigned char)((_source>>16)&0xff) );
1185 op_sta_yn( _environment );
1187 op_lda_direct( _environment, (
unsigned char)((_source>>24)&0xff) );
1189 op_sta_yn( _environment );
1210 op_ldj( _environment, _blocks );
1212 op_lda( _environment, _pattern );
1214 op_lddp( _environment, _address );
1218 op_fild_direct( _environment, 0xff );
1220 op_decjnz( _environment, label );
1237void cpu_fill(
Environment * _environment,
char * _address,
char * _bytes,
int _bytes_width,
char * _pattern ) {
1241 if ( _bytes_width == 8 ) {
1243 op_ldi( _environment, _bytes );
1245 op_lda( _environment, _pattern );
1247 op_lddp( _environment, _address );
1249 op_fild( _environment );
1254 sprintf( repeatLabel,
"%srepeat", label );
1256 op_ldi( _environment, _bytes );
1258 op_lda( _environment, _pattern );
1260 op_lddp( _environment, _address );
1262 op_fild( _environment );
1264 op_decjz( _environment, label);
1268 op_fild_direct( _environment, 0xff );
1269 op_decjnz( _environment, repeatLabel );
1294 if ( _bytes < 256 ) {
1296 op_lda( _environment, _pattern );
1298 op_lddp( _environment, _address );
1300 op_fild_direct( _environment, (
unsigned char)(_bytes&0xff) );
1305 sprintf( repeatLabel,
"%srepeat", label );
1307 op_ldij_direct( _environment, _bytes );
1309 op_lda( _environment, _pattern );
1311 op_lddp( _environment, _address );
1313 op_fild( _environment );
1314 op_decjz( _environment, label );
1318 op_fild_direct( _environment, 0xff );
1320 op_decjnz( _environment, repeatLabel );
1345 if ( _bytes < 256 ) {
1347 op_lda_direct( _environment, _pattern );
1349 op_lddp( _environment, _address );
1351 op_fild_direct( _environment, _bytes );
1356 sprintf( repeatLabel,
"%srepeat", label );
1358 op_ldij_direct( _environment, _bytes );
1360 op_lda_direct( _environment, _pattern );
1362 op_lddp( _environment, _address );
1364 op_fild( _environment );
1366 op_decjz( _environment, label );
1370 op_fild_direct( _environment, 0xff );
1371 op_decjnz( _environment, label );
1396 sprintf( repeatLabel,
"%srepeat", label );
1398 op_ldij( _environment, _bytes );
1400 op_lda( _environment, _pattern );
1402 op_lddp_direct( _environment, _address );
1404 op_fild( _environment );
1405 op_decjz( _environment, label );
1409 op_fild_direct( _environment, 0xff );
1410 op_decjnz( _environment, repeatLabel );
1434 sprintf( repeatLabel,
"%srepeat", label );
1436 op_ldij_direct( _environment, _bytes );
1438 op_lda( _environment, _pattern );
1440 op_lddp_direct( _environment, _address );
1442 op_fild( _environment );
1443 op_decjz( _environment, label );
1447 op_fild_direct( _environment, 0xff );
1448 op_decjnz( _environment, repeatLabel );
1473 sprintf( repeatLabel,
"%srepeat", label );
1475 op_ldij_direct( _environment, _bytes );
1477 op_lda_direct( _environment, _pattern );
1479 op_lddp_direct( _environment, _address );
1481 op_fild( _environment );
1482 op_decjz( _environment, label );
1486 op_fild_direct( _environment, 0xff );
1487 op_decjnz( _environment, repeatLabel );
1506 op_lda( _environment, _source );
1508 op_sta( _environment, _destination );
1521 op_lda_direct( _environment, _value );
1523 op_sta( _environment, _destination );
1536 op_lda_direct( _environment, _value );
1538 op_sta( _environment, _destination );
1544 op_ldy( _environment, _destination );
1546 op_addy_direct( _environment, _offset );
1548 op_lda_direct( _environment, _value );
1550 op_sta_y( _environment );
1556 op_lda( _environment, _offset );
1558 op_ldy( _environment, _destination );
1560 op_addya( _environment );
1562 op_lda_direct( _environment, _value );
1564 op_sta_y( _environment );
1582 sprintf( doneLabel,
"%sb2", label );
1584 op_lda( _environment, _destination );
1586 op_xab( _environment );
1588 op_lda( _environment, _source );
1590 op_cpb( _environment );
1592 op_jnz( _environment, label );
1594 op_lda_direct( _environment, 0xff*_positive );
1597 op_sta( _environment, _other );
1599 op_sta( _environment, _destination );
1602 op_jp( _environment, doneLabel );
1606 op_lda_direct( _environment, 0xff*(1-_positive) );
1609 op_sta( _environment, _other );
1630 sprintf( doneLabel,
"%sb2", label );
1632 op_lda( _environment, _source );
1634 op_cp_direct( _environment, _destination );
1636 op_jnz( _environment, label );
1638 op_lda_direct( _environment, 0xff*_positive );
1641 op_sta( _environment, _other );
1644 op_jp( _environment, doneLabel );
1648 op_lda_direct( _environment, 0xff*(1-_positive) );
1650 op_sta( _environment, _other );
1660 op_ldx( _environment, _destination );
1662 op_lda_x( _environment );
1664 op_xab( _environment );
1666 op_lda( _environment, _source );
1668 op_cpb( _environment );
1671 op_jnz( _environment, label );
1672 op_jp( _environment, _label );
1674 op_jz( _environment, label );
1675 op_jp( _environment, _label );
1695 op_lda( _environment, _source );
1697 op_cp_direct( _environment, _destination );
1700 op_jnz( _environment, label );
1701 op_jp( _environment, _label );
1703 op_jz( _environment, label );
1704 op_jp( _environment, _label );
1722 op_lda( _environment, _source );
1739 op_cp_direct( _environment, _destination );
1742 op_jnz( _environment, label );
1743 op_jp( _environment, _label );
1745 op_jz( _environment, label );
1746 op_jp( _environment, _label );
1787 op_ldi( _environment, _source );
1788 op_lda( _environment, _destination );
1790 op_call( _environment,
"CPULTE8S" );
1792 op_call( _environment,
"CPULT8S" );
1795 op_sta( _environment, _other );
1797 op_sta( _environment, _destination );
1802 op_ldi( _environment, _source );
1803 op_lda( _environment, _destination );
1805 op_call( _environment,
"CPULTE8U" );
1807 op_call( _environment,
"CPULT8U" );
1810 op_sta( _environment, _other );
1812 op_sta( _environment, _destination );
1831 op_ldi( _environment, _source );
1833 op_lda_direct( _environment, _destination );
1836 op_call( _environment,
"CPULTE8S" );
1838 op_call( _environment,
"CPULT8S" );
1841 op_sta( _environment, _other );
1845 op_ldi( _environment, _source );
1847 op_lda_direct( _environment, _destination );
1850 op_call( _environment,
"CPULTE8U" );
1852 op_call( _environment,
"CPULT8U" );
1855 op_sta( _environment, _other );
1870 sprintf( positiveLabel,
"%spos", label );
1873 sprintf( doneLabel,
"%sb2", label );
1875 op_lda( _environment, _source );
1877 op_anda_direct( _environment, 0x80 );
1878 op_cp_direct( _environment, 0x00 );
1879 op_jz( _environment, positiveLabel );
1881 op_cp_direct( _environment, _destination );
1884 op_jz( _environment, label );
1886 op_jnc( _environment, label );
1888 op_jp( _environment, doneLabel );
1892 op_cp_direct( _environment, _destination );
1894 op_jc( _environment, label );
1896 op_jnz( _environment, label );
1899 op_jp( _environment, doneLabel );
1903 op_jp( _environment, _label );
1910 sprintf( doneLabel,
"%sb2", label );
1912 op_lda( _environment, _source );
1914 op_cp_direct( _environment, _destination );
1916 op_jc( _environment, label );
1918 op_jnz( _environment, label );
1921 op_jp( _environment, doneLabel );
1925 op_jp( _environment, _label );
1948 cpu_not_8bit( _environment, _destination, _destination );
1972 op_lda( _environment, _source );
1974 op_xab( _environment );
1976 op_lda( _environment, _destination );
1978 op_addab( _environment );
1981 op_sta( _environment, _other );
1983 op_sta( _environment, _destination );
1992 op_lda( _environment, _source );
1994 op_xab( _environment );
1996 op_lda_direct( _environment, _destination );
1998 op_addab( _environment );
2001 op_sta( _environment, _other );
2018 op_lda( _environment, _source );
2020 op_xab( _environment );
2022 op_lda( _environment, _destination );
2024 op_subab( _environment );
2027 op_sta( _environment, _other );
2029 op_sta( _environment, _destination );
2045 op_lda( _environment, _source );
2046 op_anda_direct( _environment, 0x80 );
2047 op_swab( _environment );
2049 op_lda( _environment, _source );
2050 op_sla( _environment );
2051 op_orab( _environment );
2053 op_sta( _environment, _other );
2055 op_sta( _environment, _source );
2060 op_lda( _environment, _source );
2061 op_sla( _environment );
2063 op_sta( _environment, _other );
2065 op_sta( _environment, _source );
2090 op_ldi( _environment, _source );
2092 op_lda( _environment, _destination );
2094 op_call( _environment,
"CPUMUL8B8T16S");
2096 op_sta( _environment, _other );
2098 op_xab( _environment );
2104 op_ldi( _environment, _source );
2106 op_lda( _environment, _destination );
2108 op_call( _environment,
"CPUMUL8B8T16U");
2110 op_sta( _environment, _other );
2112 op_xab( _environment );
2138 op_lda( _environment, _source );
2139 op_anda_direct( _environment, 0x01 );
2140 op_sta( _environment, _remainder );
2145 op_ldi_direct( _environment, _steps );
2147 op_lda( _environment, _source );
2149 op_call( _environment,
"CPUDIV2CONST8S" );
2151 op_sta( _environment, _source );
2155 op_ldi_direct( _environment, _steps );
2157 op_lda( _environment, _source );
2159 op_call( _environment,
"CPUDIV2CONST8U" );
2161 op_sta( _environment, _source );
2186 op_ldi_direct( _environment, _steps );
2188 op_lda( _environment, _source );
2190 op_call( _environment,
"CPUMUL2CONST8S" );
2192 op_sta( _environment, _source );
2196 op_ldi_direct( _environment, _steps );
2198 op_lda( _environment, _source );
2200 op_call( _environment,
"CPUMUL2CONST8U" );
2202 op_sta( _environment, _source );
2221 op_lda( _environment, _source );
2223 op_xab( _environment );
2225 op_lda_direct( _environment, _value );
2227 op_subab( _environment );
2229 op_sta( _environment, _source );
2246 op_lda( _environment, _source );
2248 op_anda_direct( _environment, _mask );
2250 op_sta( _environment, _source );
2271 op_lda( _environment, _source );
2273 op_sta( _environment, _destination );
2287 op_lda_address_low( _environment, _source );
2289 op_sta( _environment, _destination );
2291 op_lda_address_high( _environment, _source );
2310 op_lda_direct( _environment, _value & 0xff );
2312 op_sta( _environment, _destination );
2314 op_lda_direct( _environment, (_value >> 8) & 0xff );
2338 op_ldk_direct( _environment, (0xff*_positive) );
2339 op_ldl_direct( _environment, ( 0xff*(1-_positive)) );
2341 op_ldij( _environment, _source );
2343 op_ldab( _environment, _destination );
2345 op_call( _environment,
"CPUCOMPARE16");
2347 op_sta( _environment, _other );
2349 op_sta( _environment, _destination );
2372 op_ldk_direct( _environment, (0xff*_positive) );
2373 op_ldl_direct( _environment, ( 0xff*(1-_positive)) );
2375 op_ldij( _environment, _source );
2377 op_ldab_direct( _environment, _destination );
2379 op_call( _environment,
"CPUCOMPARE16");
2381 op_sta( _environment, _other );
2393 op_ldk_direct( _environment, (0xff*_positive) );
2394 op_ldl_direct( _environment, ( 0xff*(1-_positive)) );
2396 op_ldij( _environment, _source );
2398 op_ldab( _environment, _destination );
2400 op_call( _environment,
"CPUCOMPARE16");
2401 op_cp_direct( _environment, (0xff*_positive) );
2402 op_jnz( _environment, label );
2403 op_jp( _environment, _label );
2425 op_ldk_direct( _environment, (0xff*_positive) );
2426 op_ldl_direct( _environment, ( 0xff*(1-_positive)) );
2428 op_ldij( _environment, _source );
2430 op_ldab_direct( _environment, _destination );
2432 op_call( _environment,
"CPUCOMPARE16");
2433 op_cp_direct( _environment, (0xff*_positive) );
2434 op_jnz( _environment, label );
2435 op_jp( _environment, _label );
2461 op_ldij( _environment, _source );
2463 op_ldab( _environment, _destination );
2466 op_call( _environment,
"CPULTE16S" );
2468 op_call( _environment,
"CPULT16S" );
2471 op_sta( _environment, _other );
2473 op_sta( _environment, _destination );
2478 op_ldij( _environment, _source );
2480 op_ldab( _environment, _destination );
2483 op_call( _environment,
"CPULTE16U" );
2485 op_call( _environment,
"CPULT16U" );
2488 op_sta( _environment, _other );
2490 op_sta( _environment, _destination );
2509 op_ldij( _environment, _source );
2511 op_ldab_direct( _environment, _destination );
2514 op_call( _environment,
"CPULTE16S" );
2516 op_call( _environment,
"CPULT16S" );
2519 op_sta( _environment, _other );
2523 op_ldij( _environment, _source );
2525 op_ldab_direct( _environment, _destination );
2528 op_call( _environment,
"CPULTE16U" );
2530 op_call( _environment,
"CPULT16U" );
2533 op_sta( _environment, _other );
2556 cpu_not_8bit( _environment, _destination, _destination );
2582 op_lda( _environment, _source );
2584 op_xab( _environment );
2586 op_lda( _environment, _destination );
2588 op_addab( _environment );
2591 op_sta( _environment, _other );
2593 op_sta( _environment, _destination );
2598 op_xab( _environment );
2602 op_addabc( _environment );
2620 op_lda( _environment, _source );
2622 op_xab( _environment );
2624 op_lda_direct( _environment, _destination );
2626 op_addab( _environment );
2628 op_sta( _environment, _other );
2632 op_xab( _environment );
2634 op_lda_direct( _environment, _destination>>8 );
2636 op_addabc( _environment );
2650 op_lda( _environment, _source );
2652 op_xab( _environment );
2654 op_lda_address_low( _environment, _destination );
2656 op_addab( _environment );
2658 op_sta( _environment, _other );
2662 op_xab( _environment );
2664 op_lda_address_high( _environment, _destination );
2666 op_addabc( _environment );
2685 op_ldab( _environment, _source );
2686 op_xab( _environment );
2687 op_clc( _environment );
2688 op_sla( _environment );
2689 op_xab( _environment );
2690 op_sla( _environment );
2691 op_anda_direct( _environment, 0x7f );
2693 op_stab( _environment, _other );
2695 op_stab( _environment, _source );
2700 op_ldab( _environment, _source );
2701 op_xab( _environment );
2702 op_clc( _environment );
2703 op_sla( _environment );
2704 op_xab( _environment );
2705 op_sla( _environment );
2707 op_stab( _environment, _other );
2709 op_stab( _environment, _source );
2745 op_ldij( _environment, _source );
2747 op_ldab( _environment, _destination );
2749 op_call( _environment,
"CPUMUL16B16T16U");
2751 op_stab( _environment, _other );
2773 op_lda( _environment, _source );
2775 op_xab( _environment );
2777 op_lda( _environment, _destination );
2779 op_subab( _environment );
2782 op_sta( _environment, _other );
2784 op_sta( _environment, _destination );
2789 op_xab( _environment );
2793 op_subabc( _environment );
2814 op_lda( _environment, _source );
2816 op_ldab( _environment, _source );
2818 op_lda_direct( _environment, _value & 0xff );
2820 op_subab( _environment );
2822 op_sta( _environment, _source );
2826 op_lda_direct( _environment, ( _value >> 8 ) );
2828 op_subabc( _environment );
2850 op_lda( _environment, _source );
2851 op_anda_direct( _environment, 0x01 );
2852 op_sta( _environment, _remainder );
2857 op_ldi_direct( _environment, _steps );
2859 op_ldab( _environment, _source );
2861 op_call( _environment,
"CPUDIV2CONST16S" );
2863 op_stab( _environment, _source );
2867 op_ldi_direct( _environment, _steps );
2869 op_ldab( _environment, _source );
2871 op_call( _environment,
"CPUDIV2CONST16U" );
2873 op_stab( _environment, _source );
2898 op_ldi_direct( _environment, _steps );
2900 op_ldab( _environment, _source );
2902 op_call( _environment,
"CPUMUL2CONST16S" );
2904 op_stab( _environment, _source );
2908 op_ldi_direct( _environment, _steps );
2910 op_ldab( _environment, _source );
2912 op_call( _environment,
"CPUMUL2CONST16U" );
2914 op_stab( _environment, _source );
2932 op_ldab( _environment, _source );
2934 op_anda_direct( _environment, _mask >> 8 );
2936 op_swab( _environment );
2938 op_anda_direct( _environment, _mask );
2940 op_swab( _environment );
2942 op_stab( _environment, _source );
2963 op_lda( _environment, _source );
2965 op_sta( _environment, _destination );
2994 op_lda_direct( _environment, _value );
2996 op_sta( _environment, _destination );
2998 op_lda_direct( _environment, (_value >> 8) );
3002 op_lda_direct( _environment, (_value >> 16) );
3006 op_lda_direct( _environment, (_value >> 24) );
3031 op_ldx_direct( _environment, (0xff*_positive)||(0xff00*(1-_positive)) );
3033 op_ldijab( _environment, _source );
3034 op_ldklmn( _environment, _destination );
3036 op_call( _environment,
"CPUCOMPARE32");
3038 op_sta( _environment, _other );
3040 op_sta( _environment, _destination );
3064 op_ldx_direct( _environment, (0xff*_positive)||(0xff00*(1-_positive)) );
3066 op_ldijab( _environment, _source );
3067 op_ldklmn_direct( _environment, _destination );
3069 op_call( _environment,
"CPUCOMPARE32");
3070 op_sta( _environment, _other );
3093 op_ldx_direct( _environment, (0xff*_positive)||(0xff00*(1-_positive)) );
3095 op_ldijab( _environment, _source );
3096 op_ldklmn_direct( _environment, _destination );
3098 op_call( _environment,
"CPUCOMPARE32");
3099 op_cp_direct( _environment, (0xff*_positive) );
3100 op_jnz( _environment, label );
3101 op_jp( _environment, _label );
3131 op_ldijab( _environment, _source );
3133 op_ldklmn( _environment, _destination );
3136 op_call( _environment,
"CPULTE32U" );
3138 op_call( _environment,
"CPULT32U" );
3142 op_sta( _environment, _other );
3144 op_sta( _environment, _destination );
3167 op_ldijab( _environment, _source );
3169 op_ldklmn_direct( _environment, _destination );
3172 op_call( _environment,
"CPULTE32U" );
3174 op_call( _environment,
"CPULT32U" );
3177 op_sta( _environment, _other );
3200 cpu_not_8bit( _environment, _destination, _destination );
3226 op_lda( _environment, _source );
3228 op_xab( _environment );
3230 op_lda( _environment, _destination );
3232 op_addab( _environment );
3235 op_sta( _environment, _other );
3237 op_sta( _environment, _destination );
3242 op_xab( _environment );
3246 op_addabc( _environment );
3256 op_xab( _environment );
3260 op_addabc( _environment );
3270 op_xab( _environment );
3274 op_addabc( _environment );
3292 op_lda( _environment, _source );
3294 op_xab( _environment );
3296 op_lda_direct( _environment, _destination );
3298 op_addab( _environment );
3300 op_sta( _environment, _other );
3304 op_xab( _environment );
3306 op_lda_direct( _environment,_destination >> 8 );
3308 op_addabc( _environment );
3314 op_xab( _environment );
3316 op_lda_direct( _environment,_destination >> 16 );
3318 op_addabc( _environment );
3324 op_xab( _environment );
3326 op_lda_direct( _environment,_destination >> 24 );
3328 op_addabc( _environment );
3367 op_lda( _environment, _source );
3369 op_xab( _environment );
3371 op_lda( _environment, _destination );
3373 op_subab( _environment );
3376 op_sta( _environment, _other );
3378 op_sta( _environment, _destination );
3383 op_xab( _environment );
3387 op_subabc( _environment );
3397 op_xab( _environment );
3401 op_subabc( _environment );
3411 op_xab( _environment );
3415 op_subabc( _environment );
3440 op_lda( _environment, _source );
3442 op_xab( _environment );
3444 op_lda_direct( _environment, _value );
3446 op_subab( _environment );
3448 op_sta( _environment, _source );
3452 op_xab( _environment );
3454 op_lda_direct( _environment, _value >> 8 );
3456 op_subabc( _environment );
3462 op_xab( _environment );
3464 op_lda_direct( _environment, _value >> 16 );
3466 op_subabc( _environment );
3472 op_xab( _environment );
3474 op_lda_direct( _environment, _value >> 24 );
3476 op_subabc( _environment );
3495 op_lda( _environment, _source );
3496 op_anda_direct( _environment, 0x01 );
3497 op_sta( _environment, _remainder );
3503 op_swab( _environment );
3504 op_anda_direct( _environment, 0x80 );
3505 op_swan( _environment );
3508 op_ldab( _environment, _source );
3509 op_swab( _environment );
3510 op_sra( _environment );
3511 op_swab( _environment );
3512 op_sra( _environment );
3513 op_stab( _environment, _source );
3515 op_swab( _environment );
3516 op_sra( _environment );
3517 op_swab( _environment );
3518 op_sra( _environment );
3524 op_swab( _environment );
3525 op_oram( _environment );
3526 op_swab( _environment );
3532 op_ldab( _environment, _source );
3533 op_swab( _environment );
3534 op_sra( _environment );
3535 op_swab( _environment );
3536 op_sra( _environment );
3537 op_stab( _environment, _source );
3539 op_swab( _environment );
3540 op_sra( _environment );
3541 op_swab( _environment );
3542 op_sra( _environment );
3565 op_swab( _environment );
3566 op_anda_direct( _environment, 0x80 );
3567 op_swan( _environment );
3569 op_swan( _environment );
3571 op_ldab( _environment, _source );
3572 op_sla( _environment );
3573 op_swab( _environment );
3574 op_sla( _environment );
3575 op_swab( _environment );
3576 op_stab( _environment, _source );
3578 op_sla( _environment );
3579 op_swab( _environment );
3580 op_sla( _environment );
3581 op_swab( _environment );
3587 op_swab( _environment );
3588 op_oram( _environment );
3589 op_swab( _environment );
3595 op_ldab( _environment, _source );
3596 op_sla( _environment );
3597 op_swab( _environment );
3598 op_sla( _environment );
3599 op_swab( _environment );
3600 op_stab( _environment, _source );
3602 op_sla( _environment );
3603 op_swab( _environment );
3604 op_sla( _environment );
3605 op_swab( _environment );
3625 op_ldab( _environment, _source );
3627 op_anda_direct( _environment, _mask >> 8 );
3629 op_swab( _environment );
3631 op_anda_direct( _environment, _mask );
3633 op_swab( _environment );
3635 op_stab( _environment, _source );
3639 op_anda_direct( _environment, _mask >> 24 );
3641 op_swab( _environment );
3643 op_anda_direct( _environment, _mask >> 16 );
3645 op_swab( _environment );
3670 outline1(
"CALL 0x%4.4x", _address );
3687 cpu_label( _environment, indirectLabel );
3688 cpu_jump( _environment,
"0x0000" );
3690 op_ldab( _environment, _value );
3692 cpu_call( _environment, indirectLabel );
3704 cpu_label( _environment, indirectLabel );
3705 cpu_jump( _environment,
"0x0000" );
3708 op_ldab( _environment, _value );
3710 cpu_jump( _environment, indirectLabel );
3720 if ( strcmp( _register,
"A" ) == 0 ) {
3722 }
else if ( strcmp( _register,
"B" ) == 0 ) {
3724 }
else if ( strcmp( _register,
"XL" ) == 0 ) {
3726 }
else if ( strcmp( _register,
"XH" ) == 0 ) {
3728 }
else if ( strcmp( _register,
"YL" ) == 0 ) {
3730 }
else if ( strcmp( _register,
"YH" ) == 0 ) {
3732 }
else if ( strcmp( _register,
"K" ) == 0 ) {
3734 }
else if ( strcmp( _register,
"L" ) == 0 ) {
3736 }
else if ( strcmp( _register,
"M" ) == 0 ) {
3738 }
else if ( strcmp( _register,
"N" ) == 0 ) {
3763 op_ldj_direct( _environment, _value );
3766 op_lda_direct( _environment, _value );
3769 op_ldb_direct( _environment, _value );
3772 op_push( _environment );
3773 op_ldxl_direct( _environment, _value );
3774 op_pop( _environment );
3777 op_push( _environment );
3778 op_ldxh_direct( _environment, _value );
3779 op_pop( _environment );
3782 op_push( _environment );
3783 op_ldyl_direct( _environment, _value );
3784 op_pop( _environment );
3787 op_push( _environment );
3788 op_ldyh_direct( _environment, _value );
3789 op_pop( _environment );
3792 op_push( _environment );
3793 op_ldk_direct( _environment, _value );
3794 op_pop( _environment );
3797 op_push( _environment );
3798 op_ldl_direct( _environment, _value );
3799 op_pop( _environment );
3802 op_push( _environment );
3803 op_ldm_direct( _environment, _value );
3804 op_pop( _environment );
3807 op_push( _environment );
3808 op_ldn_direct( _environment, _value );
3809 op_pop( _environment );
3821 op_lda_direct( _environment, _value );
3822 op_push( _environment );
3825 op_lda_direct( _environment, _value );
3826 op_push( _environment );
3827 op_lda_direct( _environment, _value >> 8 );
3828 op_push( _environment );
3831 op_lda_direct( _environment, _value );
3832 op_push( _environment );
3833 op_lda_direct( _environment, _value >> 8 );
3834 op_push( _environment );
3835 op_lda_direct( _environment, _value >> 16 );
3836 op_push( _environment );
3837 op_lda_direct( _environment, _value >> 24 );
3838 op_push( _environment );
3859 op_ldj( _environment, _value );
3862 op_lda( _environment, _value );
3865 op_ldb( _environment, _value );
3868 op_ldxl( _environment, _value );
3871 op_ldxh( _environment, _value );
3874 op_ldyl( _environment, _value );
3877 op_ldyh( _environment, _value );
3880 op_ldk( _environment, _value );
3883 op_ldl( _environment, _value );
3886 op_ldm( _environment, _value );
3889 op_ldn( _environment, _value );
3901 op_lda( _environment, _value );
3902 op_push( _environment );
3905 op_lda( _environment, _value );
3906 op_push( _environment );
3908 op_push( _environment );
3911 op_lda( _environment, _value );
3912 op_push( _environment );
3914 op_push( _environment );
3916 op_push( _environment );
3918 op_push( _environment );
3939 op_sti( _environment, _value );
3942 op_stj( _environment, _value );
3945 op_sta( _environment, _value );
3948 op_stb( _environment, _value );
3951 op_stxl( _environment, _value );
3954 op_stxh( _environment, _value );
3957 op_styl( _environment, _value );
3960 op_styh( _environment, _value );
3963 op_stk( _environment, _value );
3966 op_stl( _environment, _value );
3969 op_stm( _environment, _value );
3972 op_stn( _environment, _value );
3984 op_lda( _environment, _value );
3985 op_push( _environment );
3988 op_lda( _environment, _value );
3989 op_push( _environment );
3991 op_push( _environment );
3994 op_lda( _environment, _value );
3995 op_push( _environment );
3997 op_push( _environment );
3999 op_push( _environment );
4001 op_push( _environment );
4149 sprintf( waitLabel,
"%swait", label );
4151 sprintf( waitValueLabel,
"%swait+1", label );
4153 op_lda( _environment, _timing );
4154 op_sta( _environment, waitValueLabel );
4156 op_wait_direct( _environment, 0 );
4179 sprintf( doneLabel,
"%sdone", label );
4181 op_lda( _environment, _left );
4182 op_cp_direct( _environment, 0 );
4183 op_jz( _environment, label );
4184 op_lda( _environment, _right );
4185 op_cp_direct( _environment, 0 );
4186 op_jz( _environment, label );
4187 op_lda_direct( _environment, 0xff );
4188 op_sta( _environment, _result );
4189 op_jp( _environment, doneLabel );
4191 op_lda_direct( _environment, 0 );
4192 op_sta( _environment, _result );
4199 op_ldb( _environment, _right );
4200 op_lda( _environment, _left );
4201 op_andab( _environment );
4202 op_stb( _environment, _result );
4208 op_ldb_direct( _environment, _right );
4209 op_lda( _environment, _left );
4210 op_andab( _environment );
4211 op_stb( _environment, _result );
4236 sprintf( doneLabel,
"%sdone", label );
4238 op_lda( _environment, _left );
4239 op_cp_direct( _environment, 0 );
4240 op_jnz( _environment, label );
4241 op_lda( _environment, _right );
4242 op_cp_direct( _environment, 0 );
4243 op_jnz( _environment, label );
4244 op_lda_direct( _environment, 0 );
4245 op_sta( _environment, _result );
4246 op_jp( _environment, doneLabel );
4248 op_lda_direct( _environment, 0xff );
4249 op_sta( _environment, _result );
4258 op_ldb( _environment, _right );
4259 op_lda( _environment, _left );
4260 op_orab( _environment );
4261 op_stb( _environment, _result );
4269 op_ldb_direct( _environment, _right );
4270 op_lda( _environment, _left );
4271 op_orab( _environment );
4272 op_stb( _environment, _result );
4280 cpu_or_8bit( _environment, _left, _right, _result );
4289 cpu_or_8bit( _environment, _left, _right, _result );
4432 op_lda( _environment, _left );
4433 op_ldb( _environment, _right );
4434 op_xab( _environment );
4435 op_sta( _environment, _left );
4436 op_sta( _environment, _right );
4460 op_lda_direct( _environment, 0xff );
4461 op_xab( _environment );
4462 op_lda( _environment, _value );
4463 op_subab( _environment );
4464 op_sta( _environment, _result );
4470 op_lda_direct( _environment, 0xff );
4471 op_xab( _environment );
4472 op_lda( _environment, _value );
4473 op_subab( _environment );
4474 op_sta( _environment, _result );
4508 op_lda( _environment, _variable );
4509 op_inca( _environment );
4510 op_sta( _environment, _variable );
4516 op_lda( _environment, _variable );
4517 op_deca( _environment );
4518 op_sta( _environment, _variable );
4526 op_lda( _environment, _variable );
4527 op_inca( _environment );
4528 op_sta( _environment, _variable );
4529 op_cp_direct( _environment, 0 );
4530 op_jnz( _environment, label );
4532 op_inca( _environment );
4542 op_lda( _environment, _variable );
4543 op_inca( _environment );
4544 op_sta( _environment, _variable );
4545 op_cp_direct( _environment, 0 );
4546 op_jnz( _environment, label );
4549 op_inca( _environment );
4551 op_cp_direct( _environment, 0 );
4552 op_jnz( _environment, label );
4555 op_inca( _environment );
4557 op_cp_direct( _environment, 0 );
4558 op_jnz( _environment, label );
4561 op_inca( _environment );
4572 op_lda( _environment, _variable );
4573 op_deca( _environment );
4574 op_sta( _environment, _variable );
4575 op_cp_direct( _environment, 0xff );
4576 op_jnz( _environment, label );
4579 op_deca( _environment );
4581 op_cp_direct( _environment, 0 );
4582 op_jnz( _environment, label );
4592 op_lda( _environment, _variable );
4593 op_deca( _environment );
4594 op_sta( _environment, _variable );
4595 op_cp_direct( _environment, 0xff );
4596 op_jnz( _environment, label );
4599 op_deca( _environment );
4601 op_cp_direct( _environment, 0 );
4602 op_jnz( _environment, label );
4605 op_deca( _environment );
4607 op_cp_direct( _environment, 0 );
4608 op_jnz( _environment, label );
4611 op_deca( _environment );
4622 op_ldx( _environment, _source );
4623 op_ldy( _environment, _destination );
4624 op_ldi( _environment, _size );
4632 op_decinz( _environment, label );
4640 op_ldx( _environment, _source );
4641 op_ldy( _environment, _destination );
4642 op_ldij( _environment, _size );
4650 op_decijnz( _environment, label );
4701 op_ldij_direct( _environment, _size );
4702 op_ldx( _environment, _source );
4703 op_ldy( _environment, _destination );
4713 op_decijnz( _environment, label );
4988 outline1(
"LIDP %s", _destination );
4995 outline1(
"LIDP %s", _destination );
5196 if ( _size_size >= 16 ) {
5391 sprintf( step,
"%d", stepIndex );
5392 sprintf( step2,
"%d", stepIndex+2 );
5413 case 32:
case 31:
case 30:
case 29:
5414 case 28:
case 27:
case 26:
case 25:
5430 case 24:
case 23:
case 22:
case 21:
5431 case 20:
case 19:
case 18:
case 17:
5443 case 16:
case 15:
case 14:
case 13:
5444 case 12:
case 11:
case 10:
case 9:
5453 case 8:
case 7:
case 6:
case 5:
5454 case 4:
case 3:
case 2:
case 1:
5498 sprintf( step,
"%d", stepIndex );
5499 sprintf( step2,
"%d", stepIndex+2 );
5520 case 32:
case 31:
case 30:
case 29:
5521 case 28:
case 27:
case 26:
case 25:
5537 case 24:
case 23:
case 22:
case 21:
5538 case 20:
case 19:
case 18:
case 17:
5550 case 16:
case 15:
case 14:
case 13:
5551 case 12:
case 11:
case 10:
case 9:
5560 case 8:
case 7:
case 6:
case 5:
5561 case 4:
case 3:
case 2:
case 1:
6113 deploy( numberToString, src_hw_sc61860_number_to_string_asm );
6159 if ( _signed && _bits == 16 ) {
6170 if ( _signed && _bits == 8 ) {
6183 outline1(
"JRZP %spositive", label );
6336 deploy( dstring,src_hw_sc61860_dstring_asm );
6353 deploy( dstring,src_hw_sc61860_dstring_asm );
6368 deploy( dstring,src_hw_sc61860_dstring_asm );
6380 deploy( dstring,src_hw_sc61860_dstring_asm );
6391 deploy( dstring,src_hw_sc61860_dstring_asm );
6402 deploy( dstring,src_hw_sc61860_dstring_asm );
6417 deploy( dstring,src_hw_sc61860_dstring_asm );
6421 outline1(
"LIA 0x%2.2x", ( _resize & 0xff ) );
6430 deploy( dstring,src_hw_sc61860_dstring_asm );
6438 deploy( dstring,src_hw_sc61860_dstring_asm );
6446 deploy( dstring,src_hw_sc61860_dstring_asm );
6488 if ( _destination ) {
6493 if ( _destination ) {
6494 cpu_inc( _environment, _destination );
6496 cpu_inc( _environment, _source );
6506 if ( _destination ) {
6513 if ( _destination ) {
6518 if ( _destination ) {
6531 if ( _destination ) {
6538 if ( _destination ) {
6545 if ( _destination ) {
6552 if ( _destination ) {
6557 if ( _destination ) {
6584 outhead1(
"stringscount .equ %d", count );
6585 outhead1(
"stringsspace .equ %d", space );
6587 outhead0(
"MAXSTRINGS: .db stringscount" );
6589 for( i=0; i<count; ++i ) {
6593 for( i=0; i<space / 4; ++i ) {
6597 for( i=0; i<space / 4; ++i ) {
6600 outhead0(
"FREE_STRING: .db (stringsspace-1),>(stringsspace-1)" );
6609 out0(
"PROTOTHREADLC: .db ");
6610 for(
int i=0; i<count-1; ++i ) {
6615 out0(
"PROTOTHREADST: .db ");
6616 for(
int i=0; i<count-1; ++i ) {
6621 outhead1(
"PROTOTHREADCOUNT: .db 0x%2.2x", count );
6626 for(
int i=0; i<count; ++i ) {
6660 outline0(
"CALL PROTOTHREADREGAT" );
6690 outline0(
"CALL PROTOTHREADUNREG" );
6717 outline0(
"CALL PROTOTHREADRESTORE" );
6736 outline0(
"CALL PROTOTHREADSETSTATE" );
6748 outline0(
"CALL PROTOTHREADRESTORE" );
6773 outline0(
"CALL PROTOTHREADGETADDRESS" );
6910void cpu_string_sub(
Environment * _environment,
char * _source,
char * _source_size,
char * _pattern,
char * _pattern_size,
char * _destination,
char * _destination_size ) {
6947static char SC616860_BLIT_REGISTER[][2] = {
6954#define SC616860_BLII_REGISTER_COUNT ( sizeof( SC616860_BLIT_REGISTER ) / 2 )
6985 return &SC616860_BLIT_REGISTER[_register][0];
6987 return &SC616860_BLIT_REGISTER[ (_register & 0xff00) >> 8][0];
6998 int registerMask = ( 0x01 << reg );
7000 if ( ! isRegisterUsed ) {
7009 if ( location > 0xff ) {
7014 int registerMask = ( 0x10 << reg );
7016 if ( ! isRegisterUsed ) {
7021 return ( ( reg << 8 ) | location );
7035 int location = _register & 0xff;
7039 int registerMask = ( 0x01 << _register );
7041 if ( isRegisterUsed ) {
7048 int registerMask = 0x10 << ( ( _register >> 8 ) & 0xff );
7050 if ( isRegisterUsed ) {
7076 char destinationAddress[
MAX_TEMPORARY_STORAGE]; sprintf( destinationAddress,
"%s+%d", _destination, i*4 );
7079 case 1:
case 2:
case 3:
case 4:
7080 case 5:
case 6:
case 7:
case 8:
7081 cpu_store_8bit( _environment, destinationAddress, ( _value[i] & (0xff>>(8-_n)) ) );
7083 case 9:
case 10:
case 11:
case 12:
7084 case 13:
case 14:
case 15:
case 16:
7085 cpu_store_8bit( _environment, destinationAddress, ( _value[i] & (0xff) ) );
7086 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7087 cpu_store_8bit( _environment, destinationAddress, ( _value[i+1] & (0xff>>(16-_n)) ) );
7089 case 17:
case 18:
case 19:
case 20:
7090 case 21:
case 22:
case 23:
case 24:
7091 cpu_store_8bit( _environment, destinationAddress, ( _value[i] & (0xff) ) );
7092 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7093 cpu_store_8bit( _environment, destinationAddress, ( _value[i+1] & (0xff) ) );
7094 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7095 cpu_store_8bit( _environment, destinationAddress, ( _value[i+2] & (0xff>>(24-_n)) ) );
7097 case 25:
case 26:
case 27:
case 28:
7098 case 29:
case 30:
case 31:
case 32:
7100 cpu_store_8bit( _environment, destinationAddress, ( _value[i] & (0xff) ) );
7101 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7102 cpu_store_8bit( _environment, destinationAddress, ( _value[i+1] & (0xff) ) );
7103 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7104 cpu_store_8bit( _environment, destinationAddress, ( _value[i+2] & (0xff) ) );
7105 sprintf( destinationAddress,
"%s+%d", _destination, i*4+3 );
7106 cpu_store_8bit( _environment, destinationAddress, ( _value[i+3] & (0xff>>(32-_n)) ) );
7111 cpu_store_8bit( _environment, destinationAddress, ( _value[i] & (0xff) ) );
7112 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7113 cpu_store_8bit( _environment, destinationAddress, ( _value[i+1] & (0xff) ) );
7114 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7115 cpu_store_8bit( _environment, destinationAddress, ( _value[i+2] & (0xff) ) );
7116 sprintf( destinationAddress,
"%s+%d", _destination, i*4+3 );
7117 cpu_store_8bit( _environment, destinationAddress, ( _value[i+3] & (0xff>>(32-_n)) ) );
7140 char destinationAddress[
MAX_TEMPORARY_STORAGE]; sprintf( destinationAddress,
"%s+%d", _destination, i*4 );
7143 case 1:
case 2:
case 3:
case 4:
7144 case 5:
case 6:
case 7:
case 8:
7145 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7147 case 9:
case 10:
case 11:
case 12:
7148 case 13:
case 14:
case 15:
case 16:
7149 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7150 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7151 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7152 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7154 case 17:
case 18:
case 19:
case 20:
7155 case 21:
case 22:
case 23:
case 24:
7156 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7157 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7158 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7159 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7160 sprintf( sourceAddress,
"%s+%d", _source, i*4+2 );
7161 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7162 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7164 case 25:
case 26:
case 27:
case 28:
7165 case 29:
case 30:
case 31:
case 32:
7167 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7168 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7169 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7170 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7171 sprintf( sourceAddress,
"%s+%d", _source, i*4+2 );
7172 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7173 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7174 sprintf( sourceAddress,
"%s+%d", _source, i*4+3 );
7175 sprintf( destinationAddress,
"%s+%d", _destination, i*4+3 );
7176 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7181 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7182 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7183 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7184 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7185 sprintf( sourceAddress,
"%s+%d", _source, i*4+2 );
7186 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7187 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7188 sprintf( sourceAddress,
"%s+%d", _source, i*4+3 );
7189 sprintf( destinationAddress,
"%s+%d", _destination, i*4+3 );
7190 cpu_move_8bit( _environment, sourceAddress, destinationAddress );
7213 sprintf( differentLabel,
"%sdifferent:", label );
7218 char destinationAddress[
MAX_TEMPORARY_STORAGE]; sprintf( destinationAddress,
"%s+%d", _destination, i*4 );
7221 case 1:
case 2:
case 3:
case 4:
7222 case 5:
case 6:
case 7:
case 8:
7223 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7226 case 9:
case 10:
case 11:
case 12:
7227 case 13:
case 14:
case 15:
case 16:
7228 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7230 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7231 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7232 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7235 case 17:
case 18:
case 19:
case 20:
7236 case 21:
case 22:
case 23:
case 24:
7237 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7239 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7240 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7241 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7243 sprintf( sourceAddress,
"%s+%d", _source, i*4+2 );
7244 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7245 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7248 case 25:
case 26:
case 27:
case 28:
7249 case 29:
case 30:
case 31:
case 32:
7251 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7253 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7254 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7255 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7257 sprintf( sourceAddress,
"%s+%d", _source, i*4+2 );
7258 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7259 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7261 sprintf( sourceAddress,
"%s+%d", _source, i*4+3 );
7262 sprintf( destinationAddress,
"%s+%d", _destination, i*4+3 );
7263 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7269 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7271 sprintf( sourceAddress,
"%s+%d", _source, i*4+1 );
7272 sprintf( destinationAddress,
"%s+%d", _destination, i*4+1 );
7273 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7275 sprintf( sourceAddress,
"%s+%d", _source, i*4+2 );
7276 sprintf( destinationAddress,
"%s+%d", _destination, i*4+2 );
7277 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7279 sprintf( sourceAddress,
"%s+%d", _source, i*4+3 );
7280 sprintf( destinationAddress,
"%s+%d", _destination, i*4+3 );
7281 cpu_compare_8bit( _environment, sourceAddress, destinationAddress, _name, _positive );
7308 double integral = 0.0;
7309 double fractional = 0.0;
7315 int mantissa_bits = 16;
7317 memset( &right[0], 0,
sizeof(
int ) * 2 );
7324 if ( _value >= 0 ) {
7330 value = fabs( _value );
7339 fractional = modf(value, &integral);
7341 left = (
unsigned int) integral;
7359 while( ( fractional != 1.0 ) && ( steps < mantissa_bits ) ) {
7363 right[1] = right[1] << 1;
7364 right[0] = right[0] << 1;
7365 if ( ( right[1] & 0x100 ) ) {
7366 right[0] = right[0] | 0x1;
7368 right[1] = right[1] & 0xff;
7369 right[0] = right[0] & 0xff;
7371 fractional = fractional * 2;
7373 if ( fractional >= 1.0 ) {
7375 fractional = modf(fractional, &integral);
7400 int mantissa_high_bit = 0x80000000 >> ( 32 - mantissa_bits);
7401 int mantissa_mask = 0xffffffff >> ( 32 - mantissa_bits);
7407 while( left == 0 ) {
7411 if ( ! right[0] && ! right[1] && ! right[2] ) {
7415 if ( right[0] & 0x80 ) {
7419 right[0] = right[0] << 1;
7420 right[1] = right[1] << 1;
7421 if ( ( right[1] & 0x100 )) {
7422 right[0] = right[0] | 0x1;
7424 right[0] = right[0] & 0xff;
7425 right[1] = right[1] & 0xff;
7444 if ( ( right[0] & 0x01 ) ) {
7445 right[1] = right[1] | 0x100;
7447 right[0] = right[0] >> 1;
7448 right[1] = right[1] >> 1;
7450 right[0] = right[0] | 0x80;
7457 right[1] = right[1] << 1;
7458 right[0] = right[0] << 1;
7459 if ( right[1] & 0x100 ) {
7460 right[0] = right[0] | 0x01;
7462 right[1] = right[1] & 0xff;
7463 right[0] = right[0] & 0xff;
7509 _result[0] = (
sign << 7 ) | ( exp & 0x7f );
7510 _result[1] = ( right[0] );
7511 _result[2] = ( right[1] );
7527 double integral = 0.0;
7528 double fractional = 0.0;
7534 int mantissa_bits = 23;
7536 memset( &right[0], 0,
sizeof(
int ) * 3 );
7543 if ( _value >= 0 ) {
7549 value = fabs( _value );
7558 fractional = modf(value, &integral);
7560 left = (
unsigned int) integral;
7578 while( ( fractional != 1.0 ) && ( steps < mantissa_bits ) ) {
7582 right[2] = right[2] << 1;
7583 right[1] = right[1] << 1;
7584 right[0] = right[0] << 1;
7585 if ( ( right[2] & 0x100 ) ) {
7586 right[1] = right[1] | 0x1;
7588 if ( ( right[1] & 0x100 ) ) {
7589 right[0] = right[0] | 0x1;
7591 right[2] = right[2] & 0xff;
7592 right[1] = right[1] & 0xff;
7593 right[0] = right[0] & 0x7f;
7595 fractional = fractional * 2;
7597 if ( fractional >= 1.0 ) {
7599 fractional = modf(fractional, &integral);
7624 int mantissa_high_bit = 0x80000000 >> ( 32 - mantissa_bits);
7625 int mantissa_mask = 0xffffffff >> ( 32 - mantissa_bits);
7631 while( left == 0 ) {
7635 if ( right[0] & 0x40 ) {
7639 right[0] = right[0] << 1;
7640 right[1] = right[1] << 1;
7641 right[2] = right[2] << 1;
7642 if ( ( right[1] & 0x100 )) {
7643 right[0] = right[0] | 0x1;
7645 if ( ( right[2] & 0x100 )) {
7646 right[1] = right[1] | 0x1;
7648 right[0] = right[0] & 0x7f;
7649 right[1] = right[1] & 0xff;
7650 right[2] = right[2] & 0xff;
7669 if ( ( right[0] & 0x01 ) ) {
7670 right[1] = right[1] | 0x100;
7672 if ( ( right[1] & 0x01 ) ) {
7673 right[2] = right[2] | 0x100;
7675 right[0] = right[0] >> 1;
7676 right[1] = right[1] >> 1;
7679 right[0] = right[0] | 0x40;
7686 right[2] = right[2] << 1;
7687 right[1] = right[1] << 1;
7688 right[0] = right[0] << 1;
7689 if ( right[2] & 0x100 ) {
7690 right[1] = right[1] | 0x01;
7692 if ( right[1] & 0x100 ) {
7693 right[0] = right[0] | 0x01;
7695 right[2] = right[2] & 0xff;
7696 right[1] = right[1] & 0xff;
7697 right[0] = right[0] & 0x7f;
7743 _result[3] = (
sign << 7 ) | ( ( exp >> 1 ) & 0x7f );
7744 _result[2] = ( ( exp & 0x01 ) << 7 ) | ( right[0] );
7745 _result[1] = ( right[1] );
7746 _result[0] = ( right[2] );
8607 for(
int i=0; i<_count; ++i ) {
8685 op_lda( _environment, _source );
8686 op_xab( _environment );
8687 op_lda_direct( _environment, 0 );
8688 op_stab( _environment, _destination );
8697 sprintf(positiveLabel,
"%spos", label );
8699 op_lda(_environment, _source );
8700 op_sta(_environment, _destination );
8701 op_cp_direct(_environment, 0x80 );
8702 op_jc(_environment, positiveLabel );
8703 op_lda_direct( _environment, 0xff );
8704 op_jp( _environment, label );
8705 cpu_label(_environment, positiveLabel );
8706 op_lda_direct( _environment, 0x00 );
8739 op_lda( _environment, _source );
8740 op_sta( _environment, _source );
8746 op_lda( _environment, _source );
8747 op_sta( _environment, _source );
8753 op_ldab( _environment, _source );
8754 op_xab( _environment );
8755 op_sta( _environment, _destination );
8779 op_ldab( _environment, _source );
8780 op_stab( _environment, _destination );
8781 op_ldab_direct( _environment, 0 );
8805 op_lda( _environment, _source );
8806 op_sta( _environment, _destination );
8831 op_ldab( _environment, _source );
8832 op_stab( _environment, _destination );
void cpu_math_mul2_const_16bit(Environment *_environment, char *_source, int _steps, int _signed)
CPU 6309: emit code to halves for several times a 8 bit value
void cpu_math_mul2_const_8bit(Environment *_environment, char *_source, int _steps, int _signed)
CPU 6309: emit code to double for several times a 8 bit value
void cpu_store_16bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 16 bit
void cpu_math_div2_const_8bit(Environment *_environment, char *_source, int _steps, int _signed, char *_remainder)
CPU 6309: emit code to halves for several times a 8 bit value
void cpu_math_and_const_32bit(Environment *_environment, char *_source, int _mask)
CPU 6309: emit code to mask with "and" a value of 32 bit
void cpu_addressof_16bit(Environment *_environment, char *_source, char *_destination)
void cpu_math_complement_const_8bit(Environment *_environment, char *_source, int _value)
CPU 6309: emit code to calculate an 8 bit complement of a number
void cpu_less_than_8bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
CPU 6309: emit code to compare two 8 bit values
void cpu_math_add_16bit(Environment *_environment, char *_source, char *_destination, char *_other)
CPU 6309: emit code to add two 16 bit values
void cpu_math_add_16bit_const(Environment *_environment, char *_source, int _destination, char *_other)
void cpu_protothread_vars(Environment *_environment)
void cpu_math_add_16bit_with_16bit(Environment *_environment, char *_source, char *_destination, char *_other)
CPU 6309: emit code to add two 16 bit values
void cpu_compare_and_branch_16bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
CPU 6309: emit code to compare two 8 bit values and jump if they are equal/different
void cpu_math_mul_8bit_to_16bit(Environment *_environment, char *_source, char *_destination, char *_other, int _signed)
CPU 6309: emit code to multiply two 8bit values in a 16 bit register
void cpu_math_sub_16bit(Environment *_environment, char *_source, char *_destination, char *_other)
CPU 6309: emit code to subtract two 16 bit values
void cpu_math_and_const_16bit(Environment *_environment, char *_source, int _mask)
CPU 6309: emit code to mask with "and" a value of 16 bit
void cpu_move_16bit(Environment *_environment, char *_source, char *_destination)
CPU 6309: emit code to move 16 bit
void cpu_compare_32bit(Environment *_environment, char *_source, char *_destination, char *_other, int _positive)
CPU 6309: emit code to compare two 32 bit values
void cpu_compare_and_branch_16bit(Environment *_environment, char *_source, char *_destination, char *_label, int _positive)
void cpu_less_than_16bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
CPU 6309: emit code to compare two 8 bit values
void cpu_math_and_const_8bit(Environment *_environment, char *_source, int _mask)
CPU 6309: emit code to mask with "and" a value of 8 bit
void cpu_math_div2_const_16bit(Environment *_environment, char *_source, int _steps, int _signed, char *_remainder)
CPU 6309: emit code to halves for several times a 16 bit value
void cpu_compare_16bit(Environment *_environment, char *_source, char *_destination, char *_other, int _positive)
CPU 6309: emit code to compare two 16 bit values
void cpu_less_than_32bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
CPU 6309: emit code to compare two 32 bit values
Variable * variable_import(Environment *_environment, char *_name, VariableType _type, int _size_or_value)
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
#define DSTRING_DEFAULT_SPACE
#define DSTRING_DEFAULT_COUNT
void cpu_and_32bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_float_single_cos(Environment *_environment, char *_angle, char *_result)
void cpu_protothread_get_state(Environment *_environment, char *_index, char *_state)
void cpu_float_fast_neg(Environment *_environment, char *_value, char *_result)
void cpu_set_callback(Environment *_environment, char *_callback, char *_label)
void cpu_move_32bit_indirect2(Environment *_environment, char *_value, char *_source)
void cpu_dsfree(Environment *_environment, char *_index)
void cpu_less_than_memory_size(Environment *_environment, char *_source, char *_destination, int _size, char *_result, int _equal)
void cpu_dsresize_size(Environment *_environment, char *_index, int _resize)
void cpu_move_8bit_signed_32bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_float_fast_from_8(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_in(Environment *_environment, char *_port, char *_value)
void cpu_pokew(Environment *_environment, char *_address, char *_source)
void cpu_move_32bit_signed_16bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_combine_nibbles(Environment *_environment, char *_low_nibble, char *_hi_nibble, char *_byte)
SC616860: emit code to combine nibbles
char * cpu_blit_register_name(Environment *_environment, int _register)
void cpu_di(Environment *_environment)
void cpu_float_fast_tan(Environment *_environment, char *_angle, char *_result)
void cpu_math_double_32bit(Environment *_environment, char *_source, char *_other, int _signed)
SC616860: emit code to double a 32 bit value
void cpu_protothread_restore(Environment *_environment, char *_index, char *_step)
void cpu_msc1_uncompress_indirect_indirect(Environment *_environment, char *_input, char *_output)
void cpu_not_16bit(Environment *_environment, char *_value, char *_result)
void cpu_move_8bit_unsigned_32bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_math_mul2_const_16bit(Environment *_environment, char *_source, int _steps, int _signed)
SC616860: emit code to halves for several times a 8 bit value
void cpu_math_div_16bit_to_16bit(Environment *_environment, char *_source, char *_destination, char *_other, char *_other_remainder, int _signed)
void cpu_move_16bit_signed_32bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_move_8bit_unsigned_16bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_compare_32bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _positive)
SC616860: emit code to compare two 32 bit values
void cpu_math_mul_16bit_to_32bit(Environment *_environment, char *_source, char *_destination, char *_other, int _signed)
SC616860: emit code to multiply two 16 bit values in a 32 bit register
void cpu_swap_32bit(Environment *_environment, char *_left, char *_right)
void cpu_float_fast_from_16(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_bveq(Environment *_environment, char *_value, char *_label)
void cpu_dsresize(Environment *_environment, char *_index, char *_resize)
void cpu_move_nbit_indirect(Environment *_environment, int _n, char *_source, char *_value)
void cpu_math_div_8bit_to_8bit_const(Environment *_environment, char *_source, int _destination, char *_other, char *_other_remainder, int _signed)
void cpu_bit_check_extended(Environment *_environment, char *_value, char *_position, char *_result, int _bitwidth)
void cpu_math_div_32bit_to_16bit(Environment *_environment, char *_source, char *_destination, char *_other, char *_other_remainder, int _signed)
void cpu_math_mul2_const_8bit(Environment *_environment, char *_source, int _steps, int _signed)
SC616860: emit code to double for several times a 8 bit value
void cpu_float_fast_div(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_move_32bit_signed_16bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_move_32bit_unsigned_8bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_math_mul2_const_32bit(Environment *_environment, char *_source, int _steps, int _signed)
SC616860: emit code to double for several times a 32 bit value
void cpu_uppercase(Environment *_environment, char *_source, char *_size, char *_result)
void cpu_math_add_16bit_with_8bit(Environment *_environment, char *_source, char *_destination, char *_other)
void cpu_address_table_build(Environment *_environment, char *_table, int *_values, char *_address[], int _count)
void cpu_mem_move(Environment *_environment, char *_source, char *_destination, char *_size)
void cpu_set_asmio_indirect(Environment *_environment, int _asmio, char *_value)
void cpu_msc1_uncompress_direct_indirect(Environment *_environment, char *_input, char *_output)
void cpu_math_sub_8bit(Environment *_environment, char *_source, char *_destination, char *_other)
SC616860: emit code to subtract two 8 bit values
void cpu_xor_32bit_const(Environment *_environment, char *_left, int _right, char *_result)
void cpu_math_add_32bit(Environment *_environment, char *_source, char *_destination, char *_other)
SC616860: emit code to add two 32 bit values
void cpu_protothread_save(Environment *_environment, char *_index, int _step)
void cpu_store_char(Environment *_environment, char *_destination, int _value)
SC616860: emit code to store 8 bit
void cpu_math_complement_const_32bit(Environment *_environment, char *_source, int _value)
SC616860: emit code to calculate a 32 bit complement of a number
void cpu_store_16bit(Environment *_environment, char *_destination, int _value)
SC616860: emit code to store 16 bit
void cpu_poked(Environment *_environment, char *_address, char *_source)
void cpu_and_8bit_const(Environment *_environment, char *_left, int _right, char *_result)
void cpu_math_double_16bit(Environment *_environment, char *_source, char *_other, int _signed)
SC616860: emit code to double a 16 bit value
void cpu_math_sub_32bit(Environment *_environment, char *_source, char *_destination, char *_other)
SC616860: emit code to subtract two 32 bit values
void cpu_complement2_8bit(Environment *_environment, char *_source, char *_destination)
void cpu_msc1_uncompress_indirect_direct(Environment *_environment, char *_input, char *_output)
void cpu_math_div2_const_8bit(Environment *_environment, char *_source, int _steps, int _signed, char *_remainder)
SC616860: emit code to halves for several times a 8 bit value
void cpu_less_than_memory(Environment *_environment, char *_source, char *_destination, char *_size, char *_result, int _equal)
void cpu_dsalloc_size(Environment *_environment, int _size, char *_index)
void cpu_get_asmio_indirect(Environment *_environment, int _asmio, char *_value)
void cpu_move_16bit_unsigned_8bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_float_fast_cos(Environment *_environment, char *_angle, char *_result)
void cpu_protothread_set_state(Environment *_environment, char *_index, int _state)
void cpu_math_add_8bit(Environment *_environment, char *_source, char *_destination, char *_other)
SC616860: emit code to add two 8 bit values
void cpu_float_single_add(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_float_single_sub(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_bit_inplace_8bit_extended_indirect(Environment *_environment, char *_address, char *_position, char *_bit)
void cpu_move_8bit_unsigned_32bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_move_8bit_indirect(Environment *_environment, char *_source, char *_value)
void cpu_string_sub(Environment *_environment, char *_source, char *_source_size, char *_pattern, char *_pattern_size, char *_destination, char *_destination_size)
void cpu_compare_8bit(Environment *_environment, char *_source, char *_destination, char *_other, int _positive)
SC616860: emit code to compare two 8 bit values
void cpu_math_and_const_32bit(Environment *_environment, char *_source, int _mask)
SC616860: emit code to mask with "and" a value of 32 bit
void cpu_fill_direct_size(Environment *_environment, char *_address, int _bytes, char *_pattern)
SC616860: emit code to fill up a memory area
void cpu_addressof_16bit(Environment *_environment, char *_source, char *_destination)
void cpu_dec_16bit(Environment *_environment, char *_variable)
void cpu_dsgc(Environment *_environment)
void cpu_move_16bit_signed_32bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_inc(Environment *_environment, char *_variable)
void cpu_poke_const(Environment *_environment, char *_address, int _source)
void cpu_fill_direct(Environment *_environment, char *_address, char *_bytes, char *_pattern)
SC616860: emit code to fill up a memory area
void cpu_jump_indirect(Environment *_environment, char *_value)
void cpu_math_complement_const_8bit(Environment *_environment, char *_source, int _value)
SC616860: emit code to calculate an 8 bit complement of a number
void cpu_dsdefine(Environment *_environment, char *_string, char *_index)
void cpu_math_complement_const_16bit(Environment *_environment, char *_source, int _value)
SC616860: emit code to calculate a 16 bit complement of a number
void cpu_move_16bit_unsigned_32bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_float_single_exp(Environment *_environment, char *_value, char *_result)
void cpu_move_32bit(Environment *_environment, char *_source, char *_destination)
SC616860: emit code to move 32 bit
void cpu_fill_size(Environment *_environment, char *_address, int _bytes, char *_pattern)
SC616860: emit code to fill up a memory area
void cpu_less_than_8bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
SC616860: emit code to compare two 8 bit values
void cpu_fill_direct_size_value(Environment *_environment, char *_address, int _bytes, int _pattern)
SC616860: emit code to fill up a memory area
void cpu_float_double_to_string(Environment *_environment, char *_x, char *_string, char *_string_size)
void cpu_dec_32bit(Environment *_environment, char *_variable)
void cpu_greater_than_16bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _equal, int _signed)
void cpu_protothread_get_address(Environment *_environment, char *_index, char *_address)
void cpu_math_add_16bit(Environment *_environment, char *_source, char *_destination, char *_other)
SC616860: emit code to add two 16 bit values
void cpu_greater_than_16bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
SC616860: emit code to compare two 8 bit values
void cpu_bit_inplace_8bit(Environment *_environment, char *_value, int _position, int *_bit)
void cpu_math_add_16bit_const(Environment *_environment, char *_source, int _destination, char *_other)
CPU 6502: emit code to add two 16 bit values
void cpu_protothread_vars(Environment *_environment)
void cpu_poked_const(Environment *_environment, char *_address, int _source)
void cpu_math_add_16bit_with_16bit(Environment *_environment, char *_source, char *_destination, char *_other)
CPU 6309: emit code to add two 16 bit values
void cpu_compare_and_branch_16bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
SC616860: emit code to compare two 16 bit values and jump if they are equal/different
void cpu_move_32bit_indirect(Environment *_environment, char *_source, char *_value)
void cpu_dswrite(Environment *_environment, char *_index)
void cpu_greater_than_8bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
SC616860: emit code to compare two 8 bit values
void cpu_or_16bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_fill(Environment *_environment, char *_address, char *_bytes, int _bytes_width, char *_pattern)
SC616860: emit code to fill up a memory area
void cpu_move_16bit_indirect(Environment *_environment, char *_source, char *_value)
void cpu_limit_16bit(Environment *_environment, char *_variable, int _value)
void cpu_move_8bit_indirect_with_offset2(Environment *_environment, char *_source, char *_value, char *_offset)
void cpu_less_than_32bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _equal, int _signed)
void cpu_move_nbit_indirect2(Environment *_environment, int _n, char *_value, char *_source)
void cpu_and_8bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_float_single_log(Environment *_environment, char *_value, char *_result)
void cpu_math_mul_8bit_to_16bit(Environment *_environment, char *_source, char *_destination, char *_other, int _signed)
SC616860: emit code to multiply two 8bit values in a 16 bit register
void cpu_compare_16bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _positive)
SC616860: emit code to compare two 16 bit values
void cpu_math_sub_16bit(Environment *_environment, char *_source, char *_destination, char *_other)
SC616860: emit code to subtract two 16 bit values
void cpu_compare_and_branch_32bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
SC616860: emit code to compare two 32 bit values and jump if they are equal/different
void cpu_store_nbit(Environment *_environment, char *_destination, int _n, int _value[])
CPU SC616860: emit code to store n bit
void cpu_mem_move_direct_indirect_size(Environment *_environment, char *_source, char *_destination, int _size)
void cpu_math_and_const_16bit(Environment *_environment, char *_source, int _mask)
SC616860: emit code to mask with "and" a value of 16 bit
void cpu_move_8bit_indirect2_8bit(Environment *_environment, char *_value, char *_offset, char *_source)
void cpu_float_single_from_16(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_less_than_and_branch_8bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _equal, int _signed)
void cpu_fill_indirect(Environment *_environment, char *_address, char *_size, char *_pattern, int _size_size)
void cpu_mem_move_indirect_direct_size(Environment *_environment, char *_source, char *_destination, int _size)
void cpu_compare_and_branch_char_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
SC616860: emit code to compare two 8 bit values and jump if they are equal/different
void cpu_float_fast_sin(Environment *_environment, char *_angle, char *_result)
void cpu_label(Environment *_environment, char *_label)
void cpu_dec(Environment *_environment, char *_variable)
void cpu_and_16bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_float_fast_log(Environment *_environment, char *_value, char *_result)
void cpu_move_nbit(Environment *_environment, int _n, char *_source, char *_destination)
CPU SC616860: emit code to store n bit
void cpu_address_table_call(Environment *_environment, char *_table, char *_value, char *_address)
void cpu_logical_not_8bit(Environment *_environment, char *_value, char *_result)
void cpu_pokew_const(Environment *_environment, char *_address, int _source)
void cpu_logical_and_8bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_or_8bit_const(Environment *_environment, char *_left, int _right, char *_result)
void cpu_math_div2_const_32bit(Environment *_environment, char *_source, int _steps, int _signed, char *_remainder)
SC616860: emit code to halves for several times a 32 bit value
void cpu_halt(Environment *_environment)
void cpu_end(Environment *_environment)
void cpu_float_fast_from_double_to_int_array(Environment *_environment, double _value, int _result[])
void cpu_compare_memory(Environment *_environment, char *_source, char *_destination, char *_size, char *_result, int _equal)
void cpu_greater_than_8bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _equal, int _signed)
void cpu_complement2_16bit(Environment *_environment, char *_source, char *_destination)
void cpu_dsinit(Environment *_environment)
void cpu_xor_8bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_protothread_unregister(Environment *_environment, char *_index)
void cpu_complement2_32bit(Environment *_environment, char *_source, char *_destination)
void cpu_protothread_register_at(Environment *_environment, char *_index, char *_label)
void cpu_blit_free_register(Environment *_environment, int _register)
void cpu_lowercase(Environment *_environment, char *_source, char *_size, char *_result)
void cpu_float_single_to_8(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_move_16bit(Environment *_environment, char *_source, char *_destination)
SC616860: emit code to move 16 bit
void cpu_move_8bit_with_offset2(Environment *_environment, char *_source, char *_value, char *_offset)
#define SC616860_BLII_REGISTER_COUNT
void cpu_out(Environment *_environment, char *_port, char *_value)
void cpu_move_16bit_unsigned_8bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_blit_finalize(Environment *_environment)
void cpu_bneq(Environment *_environment, char *_label)
SC616860: emit code to make long conditional jump
void cpu_float_single_mod1(Environment *_environment, char *_value, char *_result)
void cpu_move_16bit_indirect2(Environment *_environment, char *_value, char *_source)
void cpu_float_fast_cmp(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_math_double_8bit(Environment *_environment, char *_source, char *_other, int _signed)
SC616860: emit code to double a 8 bit value
void cpu_float_fast_mul(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_bits_to_string(Environment *_environment, char *_number, char *_string, char *_string_size, int _bits, char *_zero, char *_one)
void cpu_dsalloc(Environment *_environment, char *_size, char *_index)
void cpu_port_out(Environment *_environment, char *_port, char *_value)
SC616860: emit code to send one byte throught a I/O port
void cpu_not_32bit(Environment *_environment, char *_value, char *_result)
void cpu_float_single_from_double_to_int_array(Environment *_environment, double _value, int _result[])
void cpu_float_single_to_16(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_greater_than_memory_size(Environment *_environment, char *_source, char *_destination, int _size, char *_result, int _equal)
void cpu_or_8bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_store_8bit_with_offset2(Environment *_environment, char *_destination, char *_offset, int _value)
void cpu_move_8bit_indirect2_16bit(Environment *_environment, char *_value, char *_offset, char *_source)
void cpu_math_add_32bit_const(Environment *_environment, char *_source, int _destination, char *_other)
void cpu_move_8bit_indirect_with_offset(Environment *_environment, char *_source, char *_value, int _offset)
void cpu_sqroot(Environment *_environment, char *_number, char *_result)
void cpu_number_to_string(Environment *_environment, char *_number, char *_string, char *_string_size, int _bits, int _signed)
void cpu_greater_than_32bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
SC616860: emit code to compare two 8 bit values
void cpu_peekd(Environment *_environment, char *_address, char *_target)
void cpu_in_direct(Environment *_environment, char *_port, char *_value)
void cpu_call_indirect(Environment *_environment, char *_value)
void cpu_call(Environment *_environment, char *_label)
void cpu_random_8bit(Environment *_environment, char *_entropy, char *_result)
void cpu_xor_8bit_const(Environment *_environment, char *_left, int _right, char *_result)
void cpu_move_16bit_signed_8bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_mem_move_direct(Environment *_environment, char *_source, char *_destination, char *_size)
void cpu_store_8bit(Environment *_environment, char *_destination, int _value)
SC616860: emit code to store 8 bit
void cpu_compare_nbit(Environment *_environment, int _n, char *_source, char *_destination, char *_name, int _positive)
CPU SC616860: emit code to compare n bit
void cpu_swap_8bit(Environment *_environment, char *_left, char *_right)
void cpu_float_fast_to_8(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_mem_move_direct2(Environment *_environment, char *_source, char *_destination, char *_size)
void cpu_init(Environment *_environment)
void cpu_dstring_vars(Environment *_environment)
void cpu_protothread_loop(Environment *_environment)
void cpu_float_single_div(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_out_direct(Environment *_environment, char *_port, char *_value)
void cpu_greater_than_32bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _equal, int _signed)
void cpu_protothread_current(Environment *_environment, char *_current)
void cpu_float_fast_to_16(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_mem_move_16bit(Environment *_environment, char *_source, char *_destination, char *_size)
void cpu_compare_32bit(Environment *_environment, char *_source, char *_destination, char *_other, int _positive)
SC616860: emit code to compare two 32 bit values
void cpu_set_asmio(Environment *_environment, int _asmio, int _value)
void cpu_float_fast_sqr(Environment *_environment, char *_value, char *_result)
void cpu_jump(Environment *_environment, char *_label)
void cpu_move_16bit_unsigned_32bit_signed(Environment *_environment, char *_source, char *_destination)
int cpu_blit_alloc_register(Environment *_environment)
void cpu_move_32bit_signed_8bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_mem_move_size(Environment *_environment, char *_source, char *_destination, int _size)
void cpu_fill_blocks(Environment *_environment, char *_address, char *_blocks, char *_pattern)
SC616860: emit code to fill up a memory area
void cpu_bvneq(Environment *_environment, char *_value, char *_label)
void cpu_float_single_mul(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_float_fast_exp(Environment *_environment, char *_value, char *_result)
void cpu_move_16bit_signed_8bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_compare_and_branch_16bit(Environment *_environment, char *_source, char *_destination, char *_label, int _positive)
void cpu_fill_size_value(Environment *_environment, char *_address, int _bytes, int _pattern)
SC616860: emit code to fill up a memory area
void cpu_call_addr(Environment *_environment, int _address)
void cpu_math_div_16bit_to_16bit_const(Environment *_environment, char *_source, int _destination, char *_other, char *_other_remainder, int _signed)
void cpu_poke(Environment *_environment, char *_address, char *_source)
void cpu_bit_check(Environment *_environment, char *_value, int _position, char *_result, int _bitwidth)
void cpu_protothread_register(Environment *_environment, char *_label, char *_index)
void cpu_move_32bit_signed_8bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_float_single_to_string(Environment *_environment, char *_x, char *_string, char *_string_size)
void cpu_float_single_tan(Environment *_environment, char *_angle, char *_result)
void cpu_nop(Environment *_environment)
void cpu_random_32bit(Environment *_environment, char *_entropy, char *_result)
void cpu_move_32bit_unsigned_16bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_less_than_8bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _equal, int _signed)
void cpu_prepare_for_compare_and_branch_8bit(Environment *_environment, char *_source)
SC616860: emit code to compare two 8 bit values and jump if they are equal/different
void cpu_less_than_16bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
SC616860: emit code to compare two 8 bit values
void cpu_mem_move_direct2_size(Environment *_environment, char *_source, char *_destination, int _size)
void cpu_math_and_const_8bit(Environment *_environment, char *_source, int _mask)
SC616860: emit code to mask with "and" a value of 8 bit
void cpu_move_32bit_unsigned_16bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_msc1_uncompress_direct_direct(Environment *_environment, char *_input, char *_output)
void cpu_float_single_sqr(Environment *_environment, char *_value, char *_result)
void cpu_inc_32bit(Environment *_environment, char *_variable)
void cpu_move_8bit_signed_16bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_mem_move_direct_size(Environment *_environment, char *_source, char *_destination, int _size)
void cpu_float_fast_sub(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_xor_32bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_return(Environment *_environment)
void cpu_move_8bit_indirect2(Environment *_environment, char *_value, char *_source)
void cpu_pop(Environment *_environment)
void cpu_math_sub_16bit_with_8bit(Environment *_environment, char *_source, char *_destination, char *_other)
void cpu_random_16bit(Environment *_environment, char *_entropy, char *_result)
void cpu_ei(Environment *_environment)
int cpu_register_decode(Environment *_environment, char *_register)
void cpu_or_32bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_bits_to_string_vars(Environment *_environment)
void cpu_math_div2_const_16bit(Environment *_environment, char *_source, int _steps, int _signed, char *_remainder)
SC616860: emit code to halves for several times a 16 bit value
void cpu_convert_string_into_8bit(Environment *_environment, char *_string, char *_len, char *_value)
void cpu_inc_16bit(Environment *_environment, char *_variable)
void cpu_logical_or_8bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_address_table_lookup(Environment *_environment, char *_table, int _count)
void cpu_ztoa(Environment *_environment)
void cpu_random(Environment *_environment, char *_entropy)
void cpu_move_32bit_unsigned_8bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_compare_and_branch_8bit(Environment *_environment, char *_source, char *_destination, char *_label, int _positive)
void cpu_execute_compare_and_branch_8bit_const(Environment *_environment, int _destination, char *_label, int _positive)
SC616860: emit code to compare two 8 bit values and jump if they are equal/different
void cpu_ctoa(Environment *_environment)
void cpu_move_16bit_indirect2_8bit(Environment *_environment, char *_value, char *_offset, char *_source)
void cpu_float_single_from_8(Environment *_environment, char *_value, char *_result, int _signed)
void cpu_float_single_cmp(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_move_8bit_signed_32bit_signed(Environment *_environment, char *_source, char *_destination)
void cpu_store_8bit_with_offset(Environment *_environment, char *_destination, int _value, int _offset)
void cpu_busy_wait(Environment *_environment, char *_timing)
void cpu_greater_than_memory(Environment *_environment, char *_source, char *_destination, char *_size, char *_result, int _equal)
void cpu_store_32bit(Environment *_environment, char *_destination, int _value)
SC616860: emit code to store 32 bit
void cpu_peekw(Environment *_environment, char *_address, char *_target)
void cpu_hex_to_string(Environment *_environment, char *_number, char *_string, char *_string_size, int _bits)
void cpu_move_8bit(Environment *_environment, char *_source, char *_destination)
SC616860: emit code to move 8 bit
void cpu_beq(Environment *_environment, char *_label)
SC616860: emit code to make long conditional jump
void cpu_compare_16bit(Environment *_environment, char *_source, char *_destination, char *_other, int _positive)
SC616860: emit code to compare two 16 bit values
void cpu_peek(Environment *_environment, char *_address, char *_target)
void cpu_float_fast_add(Environment *_environment, char *_x, char *_y, char *_result)
void cpu_convert_string_into_16bit(Environment *_environment, char *_string, char *_len, char *_value)
void cpu_float_single_sin(Environment *_environment, char *_angle, char *_result)
void cpu_not_8bit(Environment *_environment, char *_value, char *_result)
void cpu_math_div_8bit_to_8bit(Environment *_environment, char *_source, char *_destination, char *_other, char *_other_remainder, int _signed)
void cpu_dsdescriptor(Environment *_environment, char *_index, char *_address, char *_size)
void cpu_compare_8bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _positive)
SC616860: emit code to compare two 8 bit values
void cpu_xor_16bit(Environment *_environment, char *_left, char *_right, char *_result)
void cpu_xor_16bit_const(Environment *_environment, char *_left, int _right, char *_result)
void cpu_float_single_neg(Environment *_environment, char *_value, char *_result)
void cpu_float_double_from_double_to_int_array(Environment *_environment, double _value, int _result[])
void cpu_swap_16bit(Environment *_environment, char *_left, char *_right)
void cpu_compare_and_branch_8bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
SC616860: emit code to compare two 8 bit values and jump if they are equal/different
void cpu_math_div_32bit_to_16bit_const(Environment *_environment, char *_source, int _destination, char *_other, char *_other_remainder, int _signed)
void cpu_number_to_string_vars(Environment *_environment)
void cpu_float_fast_to_string(Environment *_environment, char *_x, char *_string, char *_string_size)
void cpu_less_than_32bit(Environment *_environment, char *_source, char *_destination, char *_other, int _equal, int _signed)
SC616860: emit code to compare two 8 bit values
void cpu_move_8bit_signed_16bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_move_8bit_unsigned_16bit_unsigned(Environment *_environment, char *_source, char *_destination)
void cpu_compare_memory_size(Environment *_environment, char *_source, char *_destination, int _size, char *_result, int _equal)
void cpu_float_fast_mod1(Environment *_environment, char *_value, char *_result)
void cpu_math_add_8bit_const(Environment *_environment, char *_source, int _destination, char *_other)
CPU 6502: emit code to add two 8 bit values
void cpu_flip_8bit(Environment *_environment, char *_source, char *_destination)
void cpu_blit_initialize(Environment *_environment)
void cpu_less_than_16bit_const(Environment *_environment, char *_source, int _destination, char *_other, int _equal, int _signed)
enum _SC61860Stack SC61860Stack
enum _SC61860Register SC61860Register
Variable * sign(Environment *_environment, char *_value)
Return the sign of a variable.
ProtothreadConfig protothreadConfig
#define MAX_TEMPORARY_STORAGE
#define deploy_with_vars(s, e, v)
#define CRITICAL_BLIT_ALLOC_REGISTER_EXHAUSTED()
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
#define CRITICAL_BLIT_INVALID_FREE_REGISTER(s, r)
#define CRITICAL_BLIT_ALLOC_MEMORY_EXHAUSTED()
#define CRITICAL_UNKNOWN_CPU_REGISTER()
#define CRITICAL_UNIMPLEMENTED(v)