Книги. А раніше дискети ділилися з інформацією для зламу та туторіалами, що чудово підходило для низькорівневого програмування. У журналах теж було багато зразків вихідного коду. Але насправді багато чого треба було зробити самому і розібратися.