{
local trans_empty = 0;
if(board.mappernum != mapper){
- print("mapper number not connected");
+ print("mapper number not connected\n");
return;
}
local cpu_loop = loopsize_get(board.cpu, cpu_trans, cpu_image_size, cpu_device_size);
}
erase_wait(d);
if(cpu_trans != trans_empty){
+ //cpu_transfer(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
co_cpu.call(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
}
if(ppu_trans != trans_empty){
}
SQInteger state_cpu = sq_getvmstate(co_cpu);
SQInteger state_ppu = sq_getvmstate(co_ppu);
- const long sleepms = d->compare == true ? 6 : 2; //W29C040 ¤Ç compare ¤ò¤¹¤ë¤È¡¢error ¤¬½Ð¤ë¤Î¤Ç½Ð¤Ê¤¤ÃͤËÄ´À° (¤ä¤Ã¤Ä¤±Âбþ)
+ const long sleepms = d->compare == true ? 11 : 2; //W29C040 ¤Ç compare ¤ò¤¹¤ë¤È¡¢error ¤¬½Ð¤ë¤Î¤Ç½Ð¤Ê¤¤ÃͤËÄ´À° (¤ä¤Ã¤Ä¤±Âбþ)
progress_init();
while((state_cpu != SQ_VMSTATE_IDLE) || (state_ppu != SQ_VMSTATE_IDLE)){
Sleep(sleepms);
d->flash_status(s);
if(state_cpu != SQ_VMSTATE_IDLE && s[0] == KAZZO_TASK_FLASH_IDLE){
- program_memoryarea(co_cpu, &d->order_cpu, d->compare, "program", &state_cpu, &console_update);
+ if(program_memoryarea(co_cpu, &d->order_cpu, d->compare, "program", &state_cpu, &console_update) == false){
+ return 0;
+ }
}
if(state_ppu != SQ_VMSTATE_IDLE && s[1] == KAZZO_TASK_FLASH_IDLE){
- program_memoryarea(co_ppu, &d->order_ppu, d->compare, "charcter", &state_ppu, &console_update);
+ if(program_memoryarea(co_ppu, &d->order_ppu, d->compare, "charcter", &state_ppu, &console_update) == false){
+ return 0;
+ }
}
if(console_update == true){
progress_draw(d->order_cpu.programming.offset, d->order_cpu.programming.count, d->order_ppu.programming.offset, d->order_ppu.programming.count);
#include <usb.h>
#include <kazzo_request.h>
#include <kazzo_task.h>
+#include "memory_manage.h"
#include "reader_master.h"
#include "usb_device.h"
#include "reader_kazzo.h"
0, data, length, TIMEOUT
);
if(cnt != length){
- usb_strerror();
+ puts(__FUNCTION__);
+ puts(usb_strerror());
exit(1);
}
}
static void device_write(usb_dev_handle *handle, enum request w, long address, long length, const uint8_t *data)
{
//Removing const attribute is not good method....
+ uint8_t *d = Malloc(length);
+ memcpy(d, data, length);
int cnt = usb_control_msg(
handle,
USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
w, address,
- 0, (uint8_t *) data, length, TIMEOUT
+ 0, d, length, TIMEOUT
);
if(cnt != length){
- usb_strerror();
+ puts(__FUNCTION__);
+ puts(usb_strerror());
exit(1);
}
+ Free(d);
}
static void kazzo_init(void)
device_write(handle, p, address, size, data);
if(dowait == true){
do{
- wait(1);
+ wait(10);
device_read(handle, s, 0, 1, &status);
}while(status != KAZZO_TASK_FLASH_IDLE);
}
return FLASH_PACKET_SIZE;
}
long count = 0;
+ uint8_t *d = Malloc(FLASH_PACKET_SIZE);
while(length >= FLASH_PACKET_SIZE){
flash_execute(p, s, address, data, FLASH_PACKET_SIZE, dowait);
+ device_read(handle, REQUEST_PPU_FLASH_BUFFER_GET, 0, FLASH_PACKET_SIZE, d);
+ if(memcmp(d, data, FLASH_PACKET_SIZE) != 0){
+ puts("packet send error");
+ }
address += FLASH_PACKET_SIZE;
data += FLASH_PACKET_SIZE;
count += FLASH_PACKET_SIZE;
length -= FLASH_PACKET_SIZE;
}
+ Free(d);
return count;
}
static long kazzo_cpu_flash_program(long address, long length, const uint8_t *data, bool dowait)