Crackforce Omega [CFO] 03

Crackforce Omega [CFO]

1.085 lines of code

ScrollerSCRLSpritesSPRT

History

Released
1986
Code
Stripe
Music
None
Graphics
Stripe
Group
CrackForce Omega — Sweden, founded 1986

CrackForce Omega's debut intro, coded by founding member Stripe, accompanied their 1986 crack of Paperboy and was reused across six more releases including Avenger, BMX Simulator, and Red Max. The intro is a stripped-down, no-frills effort typical of the earliest cracking scene: a bold block-letter CFO logo centered on screen with the cracked game title below and a horizontal scroller announcing the crack. No SID music was added — the approach was purely functional, staking a claim in the emerging Swedish cracking scene before groups like #11 Triad and #1 Fairlight had set the bar for production values.

Sources: CSDb · CSDb group · Demozoo

cfo-03.asm 1.085 lines
// ============================================
// cfo-03 - Disassembled Source
// ============================================
// KickAssembler syntax
// Generated by Restore 64 vdisasm-one 1.0 build 1, 2026-03-29 17:54:10
// https://restore64.dev by datucker / Rabenauge
//
// Load address: $0800  End: $cfff  (51200 bytes)
// Crunched with Exomizer — depacked by emulation
// Packer entry: $080b (via BASIC SYS 2059)
// Entry point:  $c000 (49152)
// IRQ handler:  $c030 (irq_c030)
// IRQ handler:  $ea31 (loc_ea31)
//
// Code: 555 bytes, Data: 50645 bytes
// Labels: 63, Subroutines: 7
//
// Cross-references: all OK
// ============================================


// --- Region $8dd0-$8dd0 ---
.pc = $8dd0 "Segment $8dd0"
        brk

// --- Region $c000-$c052 ---
.pc = $c000 "main_c000"

main_c000:
        sei
        lda #$30
        sta $0314                                   // set IRQ handler low byte
        lda #$c0
        sta $0315                                   // set IRQ handler high byte
        lda $d011
        and #$7f
        sta $d011                                   // bitmap mode, screen on, 24 rows, Y-scroll=0
        lda #$81
        sta $d012
        jsr sub_c045
        sta $033d
        sta $033e
        lda #$00
        sta $033c
        lda #$81
        sta $d01a                                   // raster IRQ on
        cli
        nop
        jmp loc_c310

// ============================================
// IRQ handler
// ============================================

irq_c030:
        lda $033c
        beq loc_c03d
        lda #$00
        sta $033c
        jmp loc_c200

loc_c03d:
        lda #$01
        sta $033c
        jmp loc_c0fd
// Referenced by: jsr from $c018

sub_c045:
        lda #$7f                                    // disable all CIA1 interrupts
        sta $dc0d                                   // disable all CIA IRQs
        lda $d016
        and #$f7
        sta $d016                                   // multicolor, 40 cols, X-scroll=7
        rts

// --- Region $c060-$c081 ---
.pc = $c060 "sub_c060"
// Referenced by: jsr from $c359

sub_c060:
        lda $dd02
        ora #$03
        sta $dd02
        lda $dd00
        and #$fc
        ora #$00
        sta $dd00
        lda #$c4
        sta $0288
        lda $d018
        and #$f0
        ora #$02
        sta $d018
        rts

// --- Region $c0b0-$c125 ---
.pc = $c0b0 "sub_c0b0"
// Referenced by: jsr from $c2c7

sub_c0b0:
        lda $dd02
        ora #$03
        sta $dd02
        lda $dd00
        and #$fc
        ora #$03
        sta $dd00
        lda #$04
        sta $0288
        lda $d018
        and #$f0
        ora #$04
        sta $d018
        sei
        lda #$31
        sta $0314                                   // set IRQ handler low byte
        lda #$ea
        sta $0315                                   // set IRQ handler high byte
        nop
        lda #$00
        sta $d015
        sta $d01d
        lda #$c8
        sta $d016                                   // hires, 40 cols, X-scroll=0
        lda #$80
        sta $d01a                                   // all IRQs off
        lda #$79
        sta $d019                                   // raster, light pen
        lda #$00
        sta $dc0d                                   // clear
        cli
        rts

scr_c0fb:
        // === Screen RAM (2 bytes, $c0fb-$c0fc) ===
        .encoding "screencode_mixed"
        .text "@"
        .byte $ad                                   // scrcode: .
        .encoding "petscii_upper"

loc_c0fd:
        lda #$0b
        sta $d020
        sta $d021
        lda $033d
        sta $d016
        lda $d011
        and #$7f
        sta $d011                                   // text mode, screen off, 25 rows, Y-scroll=3
        lda #$e0