123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /*******************************************************************************
- * Emu51
- * dis_asm.cpp:
- * Created by mlt on 22/03/23.
- ******************************************************************************/
- #include <emu51.h>
- #include <code_51.h>
- #include <dis_asm.h>
- dis_asm::dis_asm(uint8_t *tmpB, BITMAP *tmp_buf)
- {
- frame = 2;
- left = 12;
- changed = true;
- ram = tmpB;
- buf = tmp_buf;
- surface = create_bitmap(300, 500);
- clear(surface);
- }
- void dis_asm::hexoutB(int x, int y, int color, uint8_t numb)
- {
- if ( numb > 0x10 )
- {
- textprintf(surface, mainf, x, y, color, "%2x", numb);
- }
- else
- {
- textprintf(surface, mainf, x, y, color, "%2x", numb);
- textprintf(surface, mainf, x, y, color, "0");
- }
- }
- void dis_asm::draw(uint16_t adress)
- {
- int red = makecol(255, 0, 0);
- int white = makecol(255, 255, 255);
- int lblue = makecol(0, 128, 255);
- int color = white;
- int colPC = white;
- int c, cnt;
- clear(surface);
- for ( c = 20 ; c < surface->h - 10 ; c += 10 )
- {
- if ( PC == adress )
- {
- color = red;
- }
- else
- {
- color = white;
- }
- asm51[ram[adress]].make_ds(adress);
- if ( asm51[ram[adress]].code == ram[adress] )
- {
- textprintf(surface, mainf, left, c, color, "%4x:", adress);
- for ( cnt = 0 ; cnt < asm51[ram[adress]].length ; cnt++ )
- {
- if ( PC == ( adress + cnt ))
- {
- colPC = lblue;
- }
- else
- {
- colPC = color;
- }
- hexoutB(left + 50 + cnt * 24, c, colPC, ram[adress + cnt]);
- }
- textprintf(surface, mainf, left + 144, c, color, "%s", asm51[ram[adress]].display_string);
- adress += asm51[ram[adress]].length;
- }
- else
- {
- textprintf(surface, mainf, left, c, color, "%4x: ", adress);
- if ( PC == adress )
- {
- colPC = lblue;
- }
- else
- {
- colPC = color;
- }
- hexoutB(left + 50, c, colPC, ram[adress]);
- textprintf(surface, mainf, left + 144, c, color, "???");
- adress++;
- }
- }
- hline(surface, frame, surface->h - frame, surface->w - frame, white);
- vline(surface, frame, frame, surface->h - frame, white);
- vline(surface, surface->w - frame, frame, surface->h - frame, white);
- for ( c = frame ; c <= frame + 10 ; c += 2 )
- {
- hline(surface, frame, c, surface->w - frame, white);
- }
- textprintf_centre(surface, mainf, surface->w / 2, frame + 2, white, " Disassembler ");
- }
- void dis_asm::blit_it(int x, int y)
- {
- blit(surface, buf, 0, 0, x, y, surface->w, surface->h);
- }
- dis_asm::~dis_asm(void)
- {
- }
|