c64-assembler 0.2.0

Commodore 64 assembler, outputs directly to .PRG or Dasm source code
Documentation
use c64_assembler::{
    generator::{Generator, ProgramGenerator},
    validator::AssemblerResult,
};
use c64_assembler_macro::*;

#[test]
fn application_name() -> AssemblerResult<()> {
    let application = application!(name = "HelloWorld!")?;
    assert_eq!("HelloWorld!", application.name);
    let byte_code = ProgramGenerator::default().generate(application)?;
    assert_eq!(vec![0x00, 0x08,], byte_code);
    Ok(())
}

#[test]
fn application_entry_point() -> AssemblerResult<()> {
    let application = application!()?;
    assert_eq!(0x0800, application.entry_point);
    let byte_code = ProgramGenerator::default().generate(application)?;
    assert_eq!(vec![0x00, 0x08,], byte_code);
    Ok(())
}

#[test]
fn application_entry_point_0x1000() -> AssemblerResult<()> {
    let application = application!(entry_point = 0x1000)?;
    assert_eq!(0x1000, application.entry_point);
    let byte_code = ProgramGenerator::default().generate(application)?;
    assert_eq!(vec![0x00, 0x10,], byte_code);
    Ok(())
}

#[test]
fn application_basic_header() -> AssemblerResult<()> {
    let application = application!(
        name = "My demo"
        entry_point = 0x0800
        module!(
            name = "main"
            instructions!(
                include_basic_header

            main_entry_point:
                lda #$00
                rts
            )
        )
    )?;
    let byte_code = ProgramGenerator::default().generate(application)?;
    assert_eq!(
        vec![0x00, 0x08, 0, 12, 8, 10, 0, 158, 32, 50, 48, 54, 50, 0, 0, 0, 169, 0, 96],
        byte_code
    );
    Ok(())
}